diff --git a/app/Filament/Admin/Resources/UserResource.php b/app/Filament/Admin/Resources/UserResource.php index b62bfec0b..ce7166a32 100644 --- a/app/Filament/Admin/Resources/UserResource.php +++ b/app/Filament/Admin/Resources/UserResource.php @@ -18,6 +18,7 @@ use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\ImageColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Builder; class UserResource extends Resource { @@ -122,17 +123,26 @@ class UserResource extends Resource ->hintIconTooltip(fn ($operation) => $operation === 'create' ? trans('admin/user.password_help') : null) ->password(), CheckboxList::make('roles') - ->disableOptionWhen(fn (string $value): bool => $value == Role::getRootAdmin()->id) - ->relationship('roles', 'name') - ->saveRelationshipsUsing(function (User $user, array $state) { - $roles = collect($state)->map(fn ($role) => Role::findById($role))->filter(fn ($role) => $role->id !== Role::getRootAdmin()->id); - - $user->syncRoles($roles); - }) + ->hidden(fn (User $user) => $user->isRootAdmin()) + ->relationship('roles', 'name', fn (Builder $query) => $query->whereNot('id', Role::getRootAdmin()->id)) + ->saveRelationshipsUsing(fn (User $user, array $state) => $user->syncRoles(collect($state)->map(fn ($role) => Role::findById($role)))) ->dehydrated() ->label(trans('admin/user.admin_roles')) ->columnSpanFull() ->bulkToggleable(false), + CheckboxList::make('root_admin_role') + ->visible(fn (User $user) => $user->isRootAdmin()) + ->disabled() + ->options([ + 'root_admin' => Role::ROOT_ADMIN, + ]) + ->descriptions([ + 'root_admin' => trans('admin/role.root_admin', ['role' => Role::ROOT_ADMIN]), + ]) + ->formatStateUsing(fn () => ['root_admin']) + ->dehydrated(false) + ->label(trans('admin/user.admin_roles')) + ->columnSpanFull(), ]); } diff --git a/database/migrations/2025_04_07_062945_remove_additional_roles_of_root_admins.php b/database/migrations/2025_04_07_062945_remove_additional_roles_of_root_admins.php new file mode 100644 index 000000000..25dd02999 --- /dev/null +++ b/database/migrations/2025_04_07_062945_remove_additional_roles_of_root_admins.php @@ -0,0 +1,27 @@ +filter(fn ($user) => $user->isRootAdmin()); + foreach ($rootAdmins as $rootAdmin) { + $rootAdmin->syncRoles(Role::getRootAdmin()); + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // No going back + } +};