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(); } }