From cdc928a15be76f7582b02b2ea7d920b6e183fd7d Mon Sep 17 00:00:00 2001 From: Boy132 Date: Thu, 11 Dec 2025 13:16:57 +0100 Subject: [PATCH] Consolidate policies and use Subuser model for subuser resource (#1978) --- .../Pages/ListSubusers.php} | 8 ++-- .../SubuserResource.php} | 44 ++++++++----------- app/Policies/.gitkeep | 0 .../{Server => }/ActivityLogPolicy.php | 2 +- app/Policies/Admin/ServerPolicy.php | 10 ----- .../{Server => }/AllocationPolicy.php | 2 +- app/Policies/{Admin => }/ApiKeyPolicy.php | 4 +- app/Policies/{Server => }/BackupPolicy.php | 2 +- .../{Admin => }/DatabaseHostPolicy.php | 4 +- app/Policies/{Server => }/DatabasePolicy.php | 2 +- ...tPolicies.php => DefaultAdminPolicies.php} | 4 +- app/Policies/{Admin => }/EggPolicy.php | 4 +- app/Policies/{Server => }/FilePolicy.php | 2 +- app/Policies/{Admin => }/MountPolicy.php | 4 +- app/Policies/{Admin => }/NodePolicy.php | 4 +- app/Policies/{Admin => }/RolePolicy.php | 4 +- app/Policies/{Server => }/SchedulePolicy.php | 2 +- app/Policies/{Server => }/ServerPolicy.php | 6 ++- .../UserPolicy.php => SubuserPolicy.php} | 4 +- app/Policies/{Admin => }/UserPolicy.php | 4 +- .../WebhookConfigurationPolicy.php | 4 +- app/Providers/AppServiceProvider.php | 16 ------- 22 files changed, 54 insertions(+), 82 deletions(-) rename app/Filament/Server/Resources/{Users/Pages/ListUsers.php => Subusers/Pages/ListSubusers.php} (74%) rename app/Filament/Server/Resources/{Users/UserResource.php => Subusers/SubuserResource.php} (88%) delete mode 100644 app/Policies/.gitkeep rename app/Policies/{Server => }/ActivityLogPolicy.php (93%) delete mode 100644 app/Policies/Admin/ServerPolicy.php rename app/Policies/{Server => }/AllocationPolicy.php (96%) rename app/Policies/{Admin => }/ApiKeyPolicy.php (58%) rename app/Policies/{Server => }/BackupPolicy.php (95%) rename app/Policies/{Admin => }/DatabaseHostPolicy.php (91%) rename app/Policies/{Server => }/DatabasePolicy.php (96%) rename app/Policies/{Admin/DefaultPolicies.php => DefaultAdminPolicies.php} (94%) rename app/Policies/{Admin => }/EggPolicy.php (56%) rename app/Policies/{Server => }/FilePolicy.php (96%) rename app/Policies/{Admin => }/MountPolicy.php (90%) rename app/Policies/{Admin => }/NodePolicy.php (88%) rename app/Policies/{Admin => }/RolePolicy.php (56%) rename app/Policies/{Server => }/SchedulePolicy.php (96%) rename app/Policies/{Server => }/ServerPolicy.php (93%) rename app/Policies/{Server/UserPolicy.php => SubuserPolicy.php} (94%) rename app/Policies/{Admin => }/UserPolicy.php (90%) rename app/Policies/{Admin => }/WebhookConfigurationPolicy.php (62%) diff --git a/app/Filament/Server/Resources/Users/Pages/ListUsers.php b/app/Filament/Server/Resources/Subusers/Pages/ListSubusers.php similarity index 74% rename from app/Filament/Server/Resources/Users/Pages/ListUsers.php rename to app/Filament/Server/Resources/Subusers/Pages/ListSubusers.php index cd87af786..7fef5a180 100644 --- a/app/Filament/Server/Resources/Users/Pages/ListUsers.php +++ b/app/Filament/Server/Resources/Subusers/Pages/ListSubusers.php @@ -1,8 +1,8 @@ */ protected function getDefaultHeaderActions(): array diff --git a/app/Filament/Server/Resources/Users/UserResource.php b/app/Filament/Server/Resources/Subusers/SubuserResource.php similarity index 88% rename from app/Filament/Server/Resources/Users/UserResource.php rename to app/Filament/Server/Resources/Subusers/SubuserResource.php index 21218ce38..50d30cb0b 100644 --- a/app/Filament/Server/Resources/Users/UserResource.php +++ b/app/Filament/Server/Resources/Subusers/SubuserResource.php @@ -1,12 +1,12 @@ visibleFrom('lg') ->label('') ->alignCenter()->circular() - ->defaultImageUrl(fn (User $user) => Filament::getUserAvatarUrl($user)), - TextColumn::make('username') + ->defaultImageUrl(fn (Subuser $subuser) => Filament::getUserAvatarUrl($subuser->user)), + TextColumn::make('user.username') ->label(trans('server/user.username')) ->searchable(), - TextColumn::make('email') + TextColumn::make('user.email') ->label(trans('server/user.email')) ->searchable(), TextColumn::make('permissions') ->label(trans('server/user.permissions.title')) - ->state(fn (User $user) => count($server->subusers->where('user_id', $user->id)->first()->permissions)), + ->state(fn (Subuser $subuser) => count($subuser->permissions) - 1), ]) ->recordActions([ DeleteAction::make() ->label(trans('server/user.delete')) - ->hidden(fn (User $user) => user()?->id === $user->id) + ->hidden(fn (Subuser $subuser) => user()?->id === $subuser->user->id) ->successNotificationTitle(null) - ->action(function (User $user, SubuserDeletionService $subuserDeletionService) use ($server) { - $subuser = $server->subusers->where('user_id', $user->id)->first(); + ->action(function (Subuser $subuser, SubuserDeletionService $subuserDeletionService) use ($server) { $subuserDeletionService->handle($subuser, $server); Notification::make() @@ -131,13 +128,11 @@ class UserResource extends Resource }), EditAction::make() ->label(trans('server/user.edit')) - ->hidden(fn (User $user) => user()?->id === $user->id) + ->hidden(fn (Subuser $subuser) => user()?->id === $subuser->user->id) ->authorize(fn () => user()?->can(Permission::ACTION_USER_UPDATE, $server)) - ->modalHeading(fn (User $user) => trans('server/user.editing', ['user' => $user->email])) + ->modalHeading(fn (Subuser $subuser) => trans('server/user.editing', ['user' => $subuser->user->email])) ->successNotificationTitle(null) - ->action(function (array $data, SubuserUpdateService $subuserUpdateService, User $user) use ($server) { - $subuser = $server->subusers->where('user_id', $user->id)->first(); - + ->action(function (array $data, SubuserUpdateService $subuserUpdateService, Subuser $subuser) use ($server) { $permissions = collect($data) ->forget('email') ->flatMap(fn ($permissions, $key) => collect($permissions)->map(fn ($permission) => "$key.$permission")) @@ -172,7 +167,8 @@ class UserResource extends Resource 'sm' => 1, 'md' => 4, 'lg' => 5, - ]), + ]) + ->formatStateUsing(fn (Subuser $subuser) => $subuser->user->email), Actions::make([ Action::make('assignAll') ->label(trans('server/user.assign_all')) @@ -195,12 +191,10 @@ class UserResource extends Resource ->schema($tabs), ]), ]) - ->mutateRecordDataUsing(function ($data, User $user) use ($server) { - $permissionsArray = $server->subusers->where('user_id', $user->id)->first()->permissions; - + ->mutateRecordDataUsing(function ($data, Subuser $subuser) { $transformedPermissions = []; - foreach ($permissionsArray as $permission) { + foreach ($subuser->permissions as $permission) { [$group, $action] = explode('.', $permission, 2); $transformedPermissions[$group][] = $action; } @@ -312,7 +306,7 @@ class UserResource extends Resource public static function getDefaultPages(): array { return [ - 'index' => ListUsers::route('/'), + 'index' => ListSubusers::route('/'), ]; } diff --git a/app/Policies/.gitkeep b/app/Policies/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/app/Policies/Server/ActivityLogPolicy.php b/app/Policies/ActivityLogPolicy.php similarity index 93% rename from app/Policies/Server/ActivityLogPolicy.php rename to app/Policies/ActivityLogPolicy.php index d479b43ff..2671ae415 100644 --- a/app/Policies/Server/ActivityLogPolicy.php +++ b/app/Policies/ActivityLogPolicy.php @@ -1,6 +1,6 @@ $user->isRootAdmin() ? true : null); - Gate::guessPolicyNamesUsing(function (string $modelClass) { - $panelId = mb_ucfirst(Filament::getCurrentOrDefaultPanel()->getId()); - - if ($panelId === 'App') { - return; - } - - $modelName = class_basename($modelClass); - $class = "App\\Policies\\{$panelId}\\{$modelName}Policy"; - - if (class_exists($class)) { - return $class; - } - }); - AboutCommand::add('Pelican', [ 'Panel Version' => $versionService->currentPanelVersion(), 'Latest Version' => $versionService->latestPanelVersion(),