Files
GSB-Construction/database/seeders/CleanUsersSeeder.php
Ajjj be79555bd0
Some checks failed
Tests / PHP 8.3 (push) Has been cancelled
Tests / PHP 8.4 (push) Has been cancelled
Tests / PHP 8.5 (push) Has been cancelled
feat(dashboard): rebuild role mapping, cleanup database users and obsolete seeders
2026-08-20 16:41:28 +08:00

77 lines
2.9 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\User;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\PermissionRegistrar;
use Modules\UserManagement\Models\EmployeeProfile;
class CleanUsersSeeder extends Seeder
{
public function run(): void
{
app()[PermissionRegistrar::class]->forgetCachedPermissions();
// 1. Delete all users except superadmin@gsb-cons.com
$superAdmin = User::where('email', 'superadmin@gsb-cons.com')->first();
if ($superAdmin) {
User::where('id', '!=', $superAdmin->id)->delete();
$this->command->info("Deleted all non-superadmin users.");
} else {
User::query()->delete();
$superAdmin = User::create([
'name' => 'Super Administrator',
'email' => 'superadmin@gsb-cons.com',
'password' => bcrypt('password'),
'user_type' => 'admin',
'status' => 'active',
'contractor_id' => null,
]);
$this->command->info("Created fresh Super Administrator account.");
}
// 2. Ensure Super Admin role & permissions
$superAdminRole = Role::firstOrCreate(['name' => 'Super Admin', 'guard_name' => 'web']);
$adminRole = Role::firstOrCreate(['name' => 'admin', 'guard_name' => 'web']);
$pmRole = Role::firstOrCreate(['name' => 'Project Manager', 'guard_name' => 'web']);
$contractorRole = Role::firstOrCreate(['name' => 'Main Contractor Admin', 'guard_name' => 'web']);
$supervisorRole = Role::firstOrCreate(['name' => 'Construction Supervisor', 'guard_name' => 'web']);
$siteTechRole = Role::firstOrCreate(['name' => 'Site Technical', 'guard_name' => 'web']);
$allPermissions = Permission::all();
$superAdminRole->syncPermissions($allPermissions);
$adminRole->syncPermissions($allPermissions);
// Guarantee super admin state
$superAdmin->update([
'user_type' => 'admin',
'status' => 'active',
'contractor_id' => null,
]);
$superAdmin->syncRoles(['Super Admin', 'admin']);
// Profile for Super Admin
$profile = EmployeeProfile::firstOrCreate(
['user_id' => $superAdmin->id],
[
'department' => 'Administration',
'position' => 'Super Administrator',
'employee_code' => 'SUPER-0001',
'hire_date' => now(),
]
);
$superAdmin->update([
'userable_type' => EmployeeProfile::class,
'userable_id' => $profile->id,
]);
app()[PermissionRegistrar::class]->forgetCachedPermissions();
$this->command->info("Database user cleanup complete. Retained only Super Administrator (superadmin@gsb-cons.com).");
}
}