- Added new user roles: operator, operator_card, operator_loan, client, and currency_maintainer in ShieldSeeder. - Included EnsureUserHasRole middleware in the Filament panel for improved access control.
112 lines
3.7 KiB
PHP
112 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use BezhanSalleh\FilamentShield\Support\Utils;
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Spatie\Permission\PermissionRegistrar;
|
|
|
|
class ShieldSeeder extends Seeder
|
|
{
|
|
public function run(): void
|
|
{
|
|
app()[PermissionRegistrar::class]->forgetCachedPermissions();
|
|
|
|
$rolesWithPermissions = '[{"name":"super_admin","guard_name":"web","permissions":["ViewAny:Role","View:Role","Create:Role","Update:Role","Delete:Role","Restore:Role","ForceDelete:Role","ForceDeleteAny:Role","RestoreAny:Role","Replicate:Role","Reorder:Role"]}]';
|
|
$directPermissions = '[]';
|
|
|
|
static::makeRolesWithPermissions($rolesWithPermissions);
|
|
static::makeDirectPermissions($directPermissions);
|
|
|
|
$this->command->info('Shield Seeding Completed.');
|
|
|
|
$this->command->call('shield:generate', [
|
|
'--panel' => 'work',
|
|
]);
|
|
|
|
$this->command->call('shield:super-admin', [
|
|
'--user' => 1,
|
|
'--panel' => 'work',
|
|
]);
|
|
|
|
$additionalRoles = collect([
|
|
[
|
|
'name' => 'admin',
|
|
'guard_name' => 'web',
|
|
],
|
|
[
|
|
'name' => 'operator',
|
|
'guard_name' => 'web',
|
|
],
|
|
[
|
|
'name' => 'operator_card',
|
|
'guard_name' => 'web',
|
|
],
|
|
[
|
|
'name' => 'operator_loan',
|
|
'guard_name' => 'web',
|
|
],
|
|
[
|
|
'name' => 'client',
|
|
'guard_name' => 'web',
|
|
],
|
|
[
|
|
'name' => 'currency_maintainer',
|
|
'guard_name' => 'web',
|
|
],
|
|
])->map(fn ($role) => [
|
|
...$role,
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
])->toArray();
|
|
|
|
DB::table('roles')->insert($additionalRoles);
|
|
}
|
|
|
|
protected static function makeRolesWithPermissions(string $rolesWithPermissions): void
|
|
{
|
|
if (! blank($rolePlusPermissions = json_decode($rolesWithPermissions, true))) {
|
|
/** @var Model $roleModel */
|
|
$roleModel = Utils::getRoleModel();
|
|
/** @var Model $permissionModel */
|
|
$permissionModel = Utils::getPermissionModel();
|
|
|
|
foreach ($rolePlusPermissions as $rolePlusPermission) {
|
|
$role = $roleModel::firstOrCreate([
|
|
'name' => $rolePlusPermission['name'],
|
|
'guard_name' => $rolePlusPermission['guard_name'],
|
|
]);
|
|
|
|
if (! blank($rolePlusPermission['permissions'])) {
|
|
$permissionModels = collect($rolePlusPermission['permissions'])
|
|
->map(fn ($permission) => $permissionModel::firstOrCreate([
|
|
'name' => $permission,
|
|
'guard_name' => $rolePlusPermission['guard_name'],
|
|
]))
|
|
->all();
|
|
|
|
$role->syncPermissions($permissionModels);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static function makeDirectPermissions(string $directPermissions): void
|
|
{
|
|
if (! blank($permissions = json_decode($directPermissions, true))) {
|
|
/** @var Model $permissionModel */
|
|
$permissionModel = Utils::getPermissionModel();
|
|
|
|
foreach ($permissions as $permission) {
|
|
if ($permissionModel::whereName($permission)->doesntExist()) {
|
|
$permissionModel::create([
|
|
'name' => $permission['name'],
|
|
'guard_name' => $permission['guard_name'],
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|