73 lines
2.2 KiB
PHP
73 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use App\Enums\Permission as PermissionEnum;
|
|
use App\Enums\Role as RoleEnum;
|
|
use Illuminate\Database\Seeder;
|
|
use Spatie\Permission\Models\Permission;
|
|
use Spatie\Permission\Models\Role;
|
|
use Spatie\Permission\PermissionRegistrar;
|
|
|
|
class RolePermissionSeeder extends Seeder
|
|
{
|
|
public function run(): void
|
|
{
|
|
$registrar = app(PermissionRegistrar::class);
|
|
$registrar->forgetCachedPermissions();
|
|
|
|
$permissions = collect(PermissionEnum::cases())
|
|
->mapWithKeys(fn (PermissionEnum $permission) => [
|
|
$permission->value => Permission::findOrCreate($permission->value, 'web'),
|
|
]);
|
|
|
|
$registrar->forgetCachedPermissions();
|
|
|
|
foreach (RoleEnum::cases() as $role) {
|
|
$roleModel = Role::findOrCreate($role->value, 'web');
|
|
|
|
$roleModel->syncPermissions(
|
|
collect($role->permissions())
|
|
->map(fn (PermissionEnum $permission) => $permissions[$permission->value])
|
|
->all()
|
|
);
|
|
}
|
|
|
|
$legacyRoleMap = [
|
|
'super-admin' => RoleEnum::DEVELOPER->value,
|
|
'admin' => RoleEnum::DIREKTUR->value,
|
|
'hr' => RoleEnum::ADMIN_TOKO->value,
|
|
'user' => RoleEnum::NON_OPERATOR->value,
|
|
];
|
|
|
|
foreach ($legacyRoleMap as $oldRole => $newRole) {
|
|
$oldRoleModel = Role::query()->where('name', $oldRole)->where('guard_name', 'web')->first();
|
|
|
|
if (! $oldRoleModel) {
|
|
continue;
|
|
}
|
|
|
|
$newRoleModel = Role::findByName($newRole, 'web');
|
|
|
|
foreach ($oldRoleModel->users as $user) {
|
|
$user->removeRole($oldRole);
|
|
$user->assignRole($newRoleModel);
|
|
}
|
|
|
|
$oldRoleModel->delete();
|
|
}
|
|
|
|
Role::query()
|
|
->where('guard_name', 'web')
|
|
->whereNotIn('name', RoleEnum::values())
|
|
->each(fn (Role $role) => $role->delete());
|
|
|
|
Permission::query()
|
|
->where('guard_name', 'web')
|
|
->whereNotIn('name', PermissionEnum::values())
|
|
->each(fn (Permission $permission) => $permission->delete());
|
|
|
|
$registrar->forgetCachedPermissions();
|
|
}
|
|
}
|