user()?->canDo(Permissions::ADMIN_ROLES_MANAGE) ?? false; } public static function form(Schema $schema): Schema { return $schema->components([ Schemas\Components\Section::make('Rol') ->columns(2) ->schema([ Forms\Components\TextInput::make('name')->label('Slug')->required()->maxLength(64) ->disabled(fn ($record) => $record && in_array($record->name, array_keys(Permissions::roleMatrix()), true)) ->helperText('Rolurile sistem (owner/admin/etc.) au numele blocat'), Forms\Components\TextInput::make('guard_name')->default('web')->disabled(), ]), Schemas\Components\Section::make('Drepturi') ->description('Bifează ce poate face acest rol. Modificările au efect imediat.') ->schema(self::permissionFields()) ->columns(1), ]); } private static function permissionFields(): array { $fields = []; $labels = Permissions::labels(); foreach (Permissions::grouped() as $module => $perms) { $options = []; foreach ($perms as $p) { $options[$p] = $p; } $fields[] = Forms\Components\CheckboxList::make("permissions_{$module}") ->label($labels[$module] ?? ucfirst($module)) ->options($options) ->columns(2) ->bulkToggleable() ->afterStateHydrated(function (Forms\Components\CheckboxList $component, $state, $record) use ($module) { if (! $record) { $component->state([]); return; } $names = $record->permissions->pluck('name')->all(); $module_prefix = $module . '.'; $component->state(array_values(array_filter($names, fn ($n) => str_starts_with($n, $module_prefix)))); }) ->dehydrated(false); } return $fields; } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('name') ->label('Rol') ->formatStateUsing(fn ($state) => Permissions::roleLabels()[$state] ?? $state) ->searchable() ->sortable(), Tables\Columns\TextColumn::make('name') ->label('Slug') ->copyable() ->color('gray'), Tables\Columns\TextColumn::make('permissions_count') ->counts('permissions') ->label('Drepturi') ->badge(), Tables\Columns\TextColumn::make('users_count') ->counts('users') ->label('Utilizatori') ->badge(), ]) ->actions([ Actions\EditAction::make()->label('Editează drepturi'), Actions\DeleteAction::make() ->hidden(fn ($record) => in_array($record->name, array_keys(Permissions::roleMatrix()), true)), ]) ->defaultSort('name'); } public static function getPages(): array { return [ 'index' => Pages\ListRoles::route('/'), 'edit' => Pages\EditRole::route('/{record}/edit'), ]; } }