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' => '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'], ]); } } } } }