diff --git a/config/filament-permission.php b/config/filament-permission.php index d48bced..3eba669 100644 --- a/config/filament-permission.php +++ b/config/filament-permission.php @@ -52,7 +52,7 @@ */ 'seeders' => [ - 'roles' => \Lloricode\FilamentSpatieLaravelPermissionPlugin\Database\Seeders\DefaultRoleSeeder::class, + 'roles' => Lloricode\FilamentSpatieLaravelPermissionPlugin\Database\Seeders\DefaultRoleSeeder::class, /** * All permissions are generated base on your your setup. @@ -62,7 +62,11 @@ * - filament widgets that's implements `\Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionWidgets`. * - from this config key `custom_permission_names` */ - 'permissions' => \Lloricode\FilamentSpatieLaravelPermissionPlugin\Database\Seeders\DefaultPermissionSeeder::class, + 'permissions' => Lloricode\FilamentSpatieLaravelPermissionPlugin\Database\Seeders\DefaultPermissionSeeder::class, + ], + + 'model_policies' => [ + 'role' => Lloricode\FilamentSpatieLaravelPermissionPlugin\Policies\RolePolicy::class, ], 'translated' => false, diff --git a/src/Config/PermissionConfig.php b/src/Config/PermissionConfig.php index d000e31..5771874 100644 --- a/src/Config/PermissionConfig.php +++ b/src/Config/PermissionConfig.php @@ -60,4 +60,12 @@ public static function translated(): bool { return Config::boolean('filament-permission.translated', false); } + + /** + * @return class-string|null + */ + public static function rolePolicy(): ?string + { + return config('filament-permission.model_policies.role'); + } } diff --git a/src/FilamentPermissionPlugin.php b/src/FilamentPermissionPlugin.php index bf2c9c2..fa0c99f 100644 --- a/src/FilamentPermissionPlugin.php +++ b/src/FilamentPermissionPlugin.php @@ -39,7 +39,7 @@ public static function make(): static public static function get(): static { /** @var static $plugin */ - $plugin = filament(app(static::class)->getId()); + $plugin = filament(self::make()->getId()); return $plugin; } diff --git a/src/FilamentSpatieLaravelPermissionPluginServiceProvider.php b/src/FilamentSpatieLaravelPermissionPluginServiceProvider.php index d1c3e17..f7ff0ad 100644 --- a/src/FilamentSpatieLaravelPermissionPluginServiceProvider.php +++ b/src/FilamentSpatieLaravelPermissionPluginServiceProvider.php @@ -7,8 +7,8 @@ use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Facades\Gate; use Lloricode\FilamentSpatieLaravelPermissionPlugin\Commands\PermissionSyncCommand; +use Lloricode\FilamentSpatieLaravelPermissionPlugin\Config\PermissionConfig; use Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionUser; -use Lloricode\FilamentSpatieLaravelPermissionPlugin\Policies\RolePolicy; use Spatie\LaravelPackageTools\Package; use Spatie\LaravelPackageTools\PackageServiceProvider; @@ -26,13 +26,16 @@ public function configurePackage(Package $package): void public function packageRegistered(): void { $this->booting(function () { - Gate::policy(config('permission.models.role'), RolePolicy::class); + $rolePolicy = PermissionConfig::rolePolicy(); + + if ($rolePolicy !== null) { + Gate::policy(config('permission.models.role'), $rolePolicy); + } }); } public function packageBooted(): void { - Gate::after(function (Authenticatable $user) { if ($user instanceof HasPermissionUser && $user->isSuperAdmin()) { @@ -42,5 +45,6 @@ public function packageBooted(): void return null; }); + } } diff --git a/src/Policies/RolePolicy.php b/src/Policies/RolePolicy.php index 72cee7a..ccfd733 100644 --- a/src/Policies/RolePolicy.php +++ b/src/Policies/RolePolicy.php @@ -43,7 +43,7 @@ public function create(User $user): bool public function update(User&HasPermissionUser $user, RoleContract $role): bool { - if (! $user->isSuperAdmin() && $role->name === PermissionConfig::admin($role->guard_name)) { + if (! $user->isSuperAdmin() && $role->name === PermissionConfig::superAdmin($role->guard_name)) { return false; } diff --git a/src/Resources/RoleResource.php b/src/Resources/RoleResource.php index 6375ace..6304e61 100644 --- a/src/Resources/RoleResource.php +++ b/src/Resources/RoleResource.php @@ -133,7 +133,12 @@ public static function table(Table $table): Table Tables\Actions\ActionGroup::make([ Tables\Actions\DeleteAction::make() - ->disabled(fn (RoleContract $record): bool => $record->users->isNotEmpty()), +// ->disabled(fn (RoleContract $record): bool => $record->users->isNotEmpty()) + ->tooltip( + fn (RoleContract $record): ?string => $record->users->isNotEmpty() + ? trans('This role has users.') + : null + ), ]), ]) ->defaultSort('updated_at', 'desc');