Files
GSB-Construction/database/seeders/SuperAdminPermissionSeeder.php

83 lines
2.4 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class SuperAdminPermissionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// Reset cached roles and permissions
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
// 1. Define a comprehensive list of all system permissions
$permissions = [
// User Management
'users.view',
'users.create',
'users.edit',
'users.delete',
'users.manage-status',
'users.link-contractor',
'users.import',
// Role Management
'roles.view',
'roles.create',
'roles.edit',
'roles.delete',
'roles.assign',
// Contractor Management
'contractors.view',
'contractors.create',
'contractors.edit',
'contractors.delete',
'contractors.manage-status',
// Project Management
'projects.view',
'projects.create',
'projects.edit',
'projects.delete',
// Bidding & Procurements
'bids.view',
'bids.create',
'bids.edit',
'bids.delete',
'bids.approve',
// System Administration
'settings.view',
'settings.manage',
'reports.view',
'audit-logs.view',
];
// 2. Create permissions
foreach ($permissions as $permissionName) {
Permission::firstOrCreate(['name' => $permissionName, 'guard_name' => 'web']);
}
// 3. Find or create the Super Admin role
$superAdminRole = Role::firstOrCreate(['name' => 'Super Admin', 'guard_name' => 'web']);
// 4. Sync all permissions to the roles
// Note: Super Admin has a Gate::before rule in AppServiceProvider,
// so this sync is mostly to ensure the permissions show up properly in UI forms.
$allPermissions = Permission::all();
$superAdminRole->syncPermissions($allPermissions);
$this->command->info('Comprehensive Super Admin permissions have been seeded and synced!');
}
}