83 lines
2.4 KiB
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!');
|
|
}
|
|
}
|