forgetCachedPermissions(); $rolesWithPermissions = <<<'JSON' [ { "name": "Developer", "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", "ViewAny:AiringProofTheme", "View:AiringProofTheme", "Create:AiringProofTheme", "Update:AiringProofTheme", "Delete:AiringProofTheme", "Restore:AiringProofTheme", "ForceDelete:AiringProofTheme", "ForceDeleteAny:AiringProofTheme", "RestoreAny:AiringProofTheme", "Replicate:AiringProofTheme", "Reorder:AiringProofTheme", "ViewAny:Classification", "View:Classification", "Create:Classification", "Update:Classification", "Delete:Classification", "Restore:Classification", "ForceDelete:Classification", "ForceDeleteAny:Classification", "RestoreAny:Classification", "Replicate:Classification", "Reorder:Classification", "ViewAny:Department", "View:Department", "Create:Department", "Update:Department", "Delete:Department", "Restore:Department", "ForceDelete:Department", "ForceDeleteAny:Department", "RestoreAny:Department", "Replicate:Department", "Reorder:Department", "ViewAny:Location", "View:Location", "Create:Location", "Update:Location", "Delete:Location", "Restore:Location", "ForceDelete:Location", "ForceDeleteAny:Location", "RestoreAny:Location", "Replicate:Location", "Reorder:Location", "ViewAny:SubClassification", "View:SubClassification", "Create:SubClassification", "Update:SubClassification", "Delete:SubClassification", "Restore:SubClassification", "ForceDelete:SubClassification", "ForceDeleteAny:SubClassification", "RestoreAny:SubClassification", "Replicate:SubClassification", "Reorder:SubClassification", "ViewAny:SubLocation", "View:SubLocation", "Create:SubLocation", "Update:SubLocation", "Delete:SubLocation", "Restore:SubLocation", "ForceDelete:SubLocation", "ForceDeleteAny:SubLocation", "RestoreAny:SubLocation", "Replicate:SubLocation", "Reorder:SubLocation", "ViewAny:User", "View:User", "Create:User", "Update:User", "Delete:User", "Restore:User", "ForceDelete:User", "ForceDeleteAny:User", "RestoreAny:User", "Replicate:User", "Reorder:User" ] } ] JSON; $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'], ]); } } } } }