Files
GSB-Construction/Modules/RolesPermissions/database/seeders/RolesPermissionsDatabaseSeeder.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');
}
}
}