diff --git a/src/Actions/CreateRoleAction.php b/src/Actions/CreateRoleAction.php deleted file mode 100644 index e079e5a..0000000 --- a/src/Actions/CreateRoleAction.php +++ /dev/null @@ -1,27 +0,0 @@ -roleContract->findOrCreate( - name: $roleData->name, - guardName: $roleData->guard_name, - ); - - $role->givePermissionTo($roleData->permissions); - - return $role; - } -} diff --git a/src/Actions/EditRoleAction.php b/src/Actions/EditRoleAction.php deleted file mode 100644 index 2679bf6..0000000 --- a/src/Actions/EditRoleAction.php +++ /dev/null @@ -1,45 +0,0 @@ -guard_name); - - if (in_array($role->name, $roleNames, true)) { - abort(400, trans('Cannot update this role.')); - } - - $roleNames = PermissionConfig::roleNamesByGuardName($roleData->guard_name); - - $isExtraRole = in_array($role->name, $roleNames, true); - - if ($role->name !== $roleData->name) { - - if ($isExtraRole) { - abort(400, trans('Cannot update this role.')); - } - - } - - if (! $isExtraRole) { - $role->update([ - 'name' => $roleData->name, - 'guard_name' => $roleData->guard_name, - ]); - } - - $role->syncPermissions($roleData->permissions); - - return $role; - } -} diff --git a/src/Data/RoleData.php b/src/Data/RoleData.php deleted file mode 100644 index 3cca0d7..0000000 --- a/src/Data/RoleData.php +++ /dev/null @@ -1,15 +0,0 @@ - $permissions */ - public function __construct( - public string $name, - public array $permissions, - public ?string $guard_name = null, - ) {} -} diff --git a/src/Resources/RoleResource/Pages/CreateRole.php b/src/Resources/RoleResource/Pages/CreateRole.php index 770b417..7a3d589 100644 --- a/src/Resources/RoleResource/Pages/CreateRole.php +++ b/src/Resources/RoleResource/Pages/CreateRole.php @@ -6,9 +6,8 @@ use Filament\Resources\Pages\CreateRecord; use Illuminate\Database\Eloquent\Model; -use Lloricode\FilamentSpatieLaravelPermissionPlugin\Actions\CreateRoleAction; -use Lloricode\FilamentSpatieLaravelPermissionPlugin\Data\RoleData; use Lloricode\FilamentSpatieLaravelPermissionPlugin\Resources\RoleResource; +use Spatie\Permission\Contracts\Role as RoleContract; class CreateRole extends CreateRecord { @@ -17,7 +16,14 @@ class CreateRole extends CreateRecord #[\Override] protected function handleRecordCreation(array $data): Model { - return app(CreateRoleAction::class) - ->execute(new RoleData(...$data)); + /** @var RoleContract&Model $role */ + $role = app(RoleContract::class)->findOrCreate( + name: $data['name'], + guardName: $data['guard_name'], + ); + + $role->givePermissionTo($data['permissions']); + + return $role; } } diff --git a/src/Resources/RoleResource/Pages/EditRole.php b/src/Resources/RoleResource/Pages/EditRole.php index 2b2da29..f4283c4 100644 --- a/src/Resources/RoleResource/Pages/EditRole.php +++ b/src/Resources/RoleResource/Pages/EditRole.php @@ -7,8 +7,7 @@ use Filament\Actions; use Filament\Resources\Pages\EditRecord; use Illuminate\Database\Eloquent\Model; -use Lloricode\FilamentSpatieLaravelPermissionPlugin\Actions\EditRoleAction; -use Lloricode\FilamentSpatieLaravelPermissionPlugin\Data\RoleData; +use Lloricode\FilamentSpatieLaravelPermissionPlugin\Config\PermissionConfig; use Lloricode\FilamentSpatieLaravelPermissionPlugin\Resources\RoleResource; use Spatie\Permission\Contracts\Role as RoleContract; @@ -28,11 +27,34 @@ protected function getHeaderActions(): array ]; } + /** + * @param RoleContract&Model $record + * @return RoleContract&Model + */ #[\Override] protected function handleRecordUpdate(Model $record, array $data): Model { - /** @var RoleContract&Model $record */ - return app(EditRoleAction::class) - ->execute($record, new RoleData(...$data)); + $roleNames = PermissionConfig::roleNamesByGuardName($data['guard_name'] ?? null); + + $isExtraRole = in_array($record->name, $roleNames, true); + + if ($record->name !== $data['name']) { + + if ($isExtraRole) { + abort(400, trans('Cannot update role name of this role.')); + } + + } + + if (! $isExtraRole) { + $record->update([ + 'name' => $data['name'], + 'guard_name' => $data['guard_name'], + ]); + } + + $record->syncPermissions($data['permissions']); + + return $record; } }