105 lines
3.3 KiB
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');
|
|
}
|
|
}
|
|
}
|