components([ Schemas\Components\Section::make(__('Excepție')) ->columns(2) ->schema([ Forms\Components\Select::make('permission_id') ->label(__('Drept')) ->required() ->searchable() ->options(fn () => Permission::orderBy('name')->pluck('name', 'id')) ->columnSpanFull(), Forms\Components\Select::make('mode') ->required() ->options(['grant' => __('GRANT — adaugă dreptul'), 'deny' => __('DENY — interzice dreptul')]) ->default('grant'), Forms\Components\DatePicker::make('expires_at') ->label(__('Expiră la (opțional)')) ->minDate(now()), Forms\Components\Textarea::make('reason') ->label(__('Motiv')) ->columnSpanFull() ->placeholder(__('Ex: lockdown temporar; acces pentru audit; etc.')) ->rows(2), ]), ]); } public function table(Table $table): Table { return $table ->recordTitleAttribute('mode') ->columns([ Tables\Columns\TextColumn::make('permission.name') ->label(__('Drept')) ->searchable() ->sortable(), Tables\Columns\TextColumn::make('mode') ->badge() ->colors(['success' => 'grant', 'danger' => 'deny']) ->formatStateUsing(fn ($state) => strtoupper($state)), Tables\Columns\TextColumn::make('reason') ->limit(40) ->placeholder('—'), Tables\Columns\TextColumn::make('expires_at') ->label(__('Expiră')) ->date() ->placeholder(__('niciodată')) ->color(fn ($record) => $record?->isExpired() ? 'danger' : 'gray'), Tables\Columns\TextColumn::make('grantedBy.name') ->label(__('Acordat de')) ->placeholder('—') ->toggleable(), ]) ->headerActions([ Actions\CreateAction::make() ->label(__('Adaugă excepție')) ->modalHeading(__('Adaugă excepție de drept')) ->mutateDataUsing(fn (array $data) => array_merge($data, [ 'granted_at' => now(), 'granted_by_id' => auth()->id(), ])), ]) ->actions([ Actions\EditAction::make()->modalHeading(__('Editează excepția')), Actions\DeleteAction::make(), ]) ->defaultSort('granted_at', 'desc'); } }