Files
GSB-Construction/Modules/RolesPermissions/database/seeders/RolesPermissionsDatabaseSeeder.php

105 lines
3.3 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',
'bidding.access',
'users.access',
'materials-catalog.access',
'inventory.access',
'finance.access',
'documents.access',
'approvals.access',
'roles.access',
];
foreach ($permissions as $permission) {
\Spatie\Permission\Models\Permission::firstOrCreate(['name' => $permission]);
}
// Clean up old roles that are no longer used
$validRoles = [
'Super Admin',
'Owner',
'Contractor',
'Project Manager',
'Designer',
'Site Technical',
'Construction Supervisor'
];
\Spatie\Permission\Models\Role::whereNotIn('name', $validRoles)->delete();
// Create Roles
$superAdmin = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Super Admin']);
$owner = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Owner']);
$contractor = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Contractor']);
$projectManager = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Project Manager']);
$designer = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Designer']);
$siteTechnical = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Site Technical']);
$constructionSupervisor = \Spatie\Permission\Models\Role::firstOrCreate(['name' => 'Construction Supervisor']);
// Give basic permissions logically based on role name
$owner->syncPermissions([
'dashboard.access',
'projects.access',
'finance.access',
'approvals.access',
]);
$projectManager->syncPermissions([
'dashboard.access',
'projects.access',
'contractors.access',
'bidding.access',
'materials-catalog.access',
'inventory.access',
'documents.access',
'approvals.access',
]);
$contractor->syncPermissions([
'dashboard.access',
'projects.access',
'bidding.access',
'documents.access',
]);
$designer->syncPermissions([
'dashboard.access',
'projects.access',
'documents.access',
]);
$siteTechnical->syncPermissions([
'dashboard.access',
'projects.access',
'inventory.access',
'documents.access',
]);
$constructionSupervisor->syncPermissions([
'dashboard.access',
'projects.access',
'inventory.access',
'materials-catalog.access',
'documents.access',
]);
// 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');
}
}
}