feat: updates

This commit is contained in:
JP
2024-08-15 20:11:21 +08:00
parent 52431a2c61
commit 3af7207ec3
61 changed files with 1674 additions and 480 deletions

View File

@@ -0,0 +1,68 @@
<?php
namespace Database\Seeders;
use BezhanSalleh\FilamentShield\Support\Utils;
use Illuminate\Database\Seeder;
use Spatie\Permission\PermissionRegistrar;
class ShieldSeeder extends Seeder
{
public function run(): void
{
app()[PermissionRegistrar::class]->forgetCachedPermissions();
$rolesWithPermissions = '[{"name":"super_admin","guard_name":"web","permissions":[]}]';
$directPermissions = '[]';
static::makeRolesWithPermissions($rolesWithPermissions);
static::makeDirectPermissions($directPermissions);
$this->command->info('Shield Seeding Completed.');
}
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'],
]);
}
}
}
}
}