From 6909d3f8a6aab1c9cf5954d4dadea328d911cc9b Mon Sep 17 00:00:00 2001 From: Lloric Mayuga Garcia Date: Sat, 24 Aug 2024 21:08:35 +0800 Subject: [PATCH] wip Signed-off-by: Lloric Mayuga Garcia --- README.md | 45 +------------------ config/filament-permission.php | 15 +++++++ ...missionPage.php => HasPermissionPages.php} | 2 +- .../Seeders/DefaultPermissionSeeder.php | 4 +- src/FilamentPermissionGenerateName.php | 8 ++-- 5 files changed, 23 insertions(+), 51 deletions(-) rename src/Contracts/{HasPermissionPage.php => HasPermissionPages.php} (84%) diff --git a/README.md b/README.md index 29a9c3d..d283940 100644 --- a/README.md +++ b/README.md @@ -41,50 +41,7 @@ php artisan vendor:publish --tag="filament-permission-config" This is the contents of the published config file: -```php - [ - - // keyed by guard name - 'web' => [ - - // required this cannot rename or delete or modify permissions - /** - * no permission attached to this role, but it always skips gate checks - * see https://freek.dev/1325-when-to-use-gateafter-in-laravel - */ - 'super_admin' => 'super_admin', - - /** - * all permissions attached to this role - */ - 'admin' => 'admin', - - // as many as you want, below it can edit permissions but cannot rename or delete role names - // sample 'user' => 'user', - ], - ], - - 'seeders' => [ - 'roles' => \Lloricode\FilamentSpatieLaravelPermissionPlugin\Database\Seeders\DefaultRoleSeeder::class, - 'permissions' => \Lloricode\FilamentSpatieLaravelPermissionPlugin\Database\Seeders\DefaultPermissionSeeder::class, - ], - - 'translated' => false, -]; - -``` +https://github.com/lloricode/filament-spatie-laravel-permission-plugin/blob/main/config/filament-permission.php ## Usage diff --git a/config/filament-permission.php b/config/filament-permission.php index 7d97463..c92ddf8 100644 --- a/config/filament-permission.php +++ b/config/filament-permission.php @@ -32,8 +32,23 @@ ], ], + /** + * You can use this seeder class to your own project level seeder. + * But this is also able to sync your adjusted permissions name by using the ready made artisan command + * + * `php artisan permission:sync` + */ 'seeders' => [ + 'roles' => \Lloricode\FilamentSpatieLaravelPermissionPlugin\Database\Seeders\DefaultRoleSeeder::class, + + /** + * All permissions are generated base on your your setup. + * + * - public methods from Model policies class from your filament resources. + * - filament pages that's implements `\Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionPages`. + * - filament widgets that's implements `\Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionWidgets`. + */ 'permissions' => \Lloricode\FilamentSpatieLaravelPermissionPlugin\Database\Seeders\DefaultPermissionSeeder::class, ], diff --git a/src/Contracts/HasPermissionPage.php b/src/Contracts/HasPermissionPages.php similarity index 84% rename from src/Contracts/HasPermissionPage.php rename to src/Contracts/HasPermissionPages.php index 2ed41ab..091ea18 100644 --- a/src/Contracts/HasPermissionPage.php +++ b/src/Contracts/HasPermissionPages.php @@ -4,7 +4,7 @@ namespace Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts; -interface HasPermissionPage +interface HasPermissionPages { public static function canBeSeed(): bool; } diff --git a/src/Database/Seeders/DefaultPermissionSeeder.php b/src/Database/Seeders/DefaultPermissionSeeder.php index f11c832..175cd68 100644 --- a/src/Database/Seeders/DefaultPermissionSeeder.php +++ b/src/Database/Seeders/DefaultPermissionSeeder.php @@ -9,7 +9,7 @@ use Filament\Panel; use Illuminate\Support\Facades\Gate; use Lloricode\FilamentSpatieLaravelPermissionPlugin\Config\PermissionConfig; -use Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionPage; +use Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionPages; use Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionWidgets; use Lloricode\FilamentSpatieLaravelPermissionPlugin\Database\Seeders\Support\PermissionSeeder; use Lloricode\FilamentSpatieLaravelPermissionPlugin\Database\Seeders\Support\ResourceSeeder; @@ -104,7 +104,7 @@ private static function getPermissionsFromPages(): array $permissionNames = collect(); foreach (Filament::getPages() as $page) { - if (app($page) instanceof HasPermissionPage && $page::canBeSeed()) { + if (app($page) instanceof HasPermissionPages && $page::canBeSeed()) { $permissionNames->push(FilamentPermissionGenerateName::getPagePermissionName($page)); } } diff --git a/src/FilamentPermissionGenerateName.php b/src/FilamentPermissionGenerateName.php index 506844a..582c83a 100644 --- a/src/FilamentPermissionGenerateName.php +++ b/src/FilamentPermissionGenerateName.php @@ -7,7 +7,7 @@ use Filament\Facades\Filament; use Filament\Panel; use Illuminate\Support\Str; -use Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionPage; +use Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionPages; use Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionWidgets; final class FilamentPermissionGenerateName @@ -40,10 +40,10 @@ function () use ($panel) { ); } - /** @param \Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionPage|class-string<\Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionPage> $page */ - public static function getPagePermissionName(HasPermissionPage | string $page): string + /** @param \Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionPages|class-string<\Lloricode\FilamentSpatieLaravelPermissionPlugin\Contracts\HasPermissionPages> $page */ + public static function getPagePermissionName(HasPermissionPages | string $page): string { - if ($page instanceof HasPermissionPage) { + if ($page instanceof HasPermissionPages) { $page = $page::class; }