121 lines
4.0 KiB
PHP
121 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace Modules\RolesPermissions\Database\Seeders;
|
|
|
|
use Illuminate\Database\Seeder;
|
|
|
|
class RolesPermissionsDatabaseSeeder extends Seeder
|
|
{
|
|
public function run(): void
|
|
{
|
|
// Define all coarse-grained module access permissions
|
|
$permissions = [
|
|
'dashboard.access',
|
|
'projects.access',
|
|
'contractors.access',
|
|
'users.access',
|
|
'materials-catalog.access',
|
|
'inventory.access',
|
|
'finance.access',
|
|
'documents.access',
|
|
'approvals.access',
|
|
'roles.access',
|
|
'labors.access',
|
|
'equipments.access',
|
|
'create tasks',
|
|
'edit tasks',
|
|
'delete tasks',
|
|
];
|
|
|
|
foreach ($permissions as $permission) {
|
|
\Spatie\Permission\Models\Permission::firstOrCreate(['name' => $permission]);
|
|
}
|
|
|
|
// Clean up old roles that are no longer used
|
|
$validRoles = [
|
|
'Super Admin',
|
|
'Main Contractor Admin',
|
|
'Contractor Project Manager',
|
|
'Project Manager',
|
|
'Site Technical',
|
|
'Construction Supervisor',
|
|
'admin',
|
|
];
|
|
\Spatie\Permission\Models\Role::whereNotIn('name', $validRoles)->delete();
|
|
|
|
// Create Roles
|
|
$superAdmin = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Super Admin']);
|
|
$projectManager = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Project Manager']);
|
|
$contractorProjectManager = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Contractor Project Manager']);
|
|
$siteTechnical = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Site Technical']);
|
|
$constructionSupervisor = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Construction Supervisor']);
|
|
$admin = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'admin']);
|
|
$admin->syncPermissions(\Spatie\Permission\Models\Permission::all());
|
|
|
|
$mainContractorAdmin = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Main Contractor Admin']);
|
|
$mainContractorAdmin->syncPermissions([
|
|
'dashboard.access',
|
|
'projects.access',
|
|
'contractors.access',
|
|
'users.access',
|
|
'materials-catalog.access',
|
|
'inventory.access',
|
|
'finance.access',
|
|
'documents.access',
|
|
'approvals.access',
|
|
]);
|
|
|
|
$projectManager->syncPermissions([
|
|
'dashboard.access',
|
|
'projects.access',
|
|
'contractors.access',
|
|
'materials-catalog.access',
|
|
'inventory.access',
|
|
'finance.access',
|
|
'documents.access',
|
|
'approvals.access',
|
|
'labors.access',
|
|
'equipments.access',
|
|
'create tasks',
|
|
'edit tasks',
|
|
'delete tasks',
|
|
]);
|
|
|
|
$contractorProjectManager->syncPermissions([
|
|
'dashboard.access',
|
|
'projects.access',
|
|
'materials-catalog.access',
|
|
'inventory.access',
|
|
'documents.access',
|
|
'labors.access',
|
|
'equipments.access',
|
|
'create tasks',
|
|
'edit tasks',
|
|
'delete tasks',
|
|
]);
|
|
|
|
$siteTechnical->syncPermissions([
|
|
'dashboard.access',
|
|
'projects.access',
|
|
'inventory.access',
|
|
'documents.access',
|
|
'edit tasks',
|
|
]);
|
|
|
|
$constructionSupervisor->syncPermissions([
|
|
'dashboard.access',
|
|
'projects.access',
|
|
'inventory.access',
|
|
'materials-catalog.access',
|
|
'documents.access',
|
|
'edit tasks',
|
|
]);
|
|
|
|
// Assign super-admin to the first user if it exists
|
|
$firstUser = \App\Models\User::first();
|
|
if ($firstUser && $firstUser->email === 'admin@gsb-cons.com') {
|
|
$firstUser->assignRole('Super Admin');
|
|
}
|
|
}
|
|
}
|