Začínáme
Autorizace
Wire používá Laravel Gate a policies. Autorizace tak zůstává kompatibilní s nativními Laravel policies, Spatie Permission a balíčky, které registrují abilities do Gate.
Na této stránce
Wire používá Laravel Gate a policies. Autorizace tak zůstává kompatibilní s nativními Laravel policies, Spatie Permission a balíčky, které registrují abilities do Gate.
Sdílená pravidla komponent
Sloupce, filtry, akce, pole a widgety mohou používat sdílené autorizační metody, když komponenta podporuje viditelnost nebo autorizaci.
Action::make('approve') ->label('Approve') ->authorize('approve') ->action(fn (Order $record) => $record->approve()); TextColumn::make('internal_note') ->label('Internal note') ->permission('orders.internal-notes.view'); SelectFilter::make('department_id') ->authorizeUsing(fn (User $user) => $user->is_admin);
Pořadí vyhodnocení:
| Pravidlo | Chování |
|---|---|
| Žádná autorizace nakonfigurovaná | Povoleno |
| Žádný přihlášený uživatel | Zamítnuto |
authorizeUsing() |
Vlastní callback má prioritu |
authorize() |
Kontroluje Laravel Gate ability |
permission() |
Kontroluje permission řetězec přes Gate |
Autorizace per záznam
Callback authorizeUsing() dostává přihlášeného uživatele a — kde ho surface má — záznam řádku, takže autorizaci lze zúžit per záznam:
Action::make('approve') ->authorizeUsing(fn (User $user, $record) => $user->id === $record?->manager_id) ->action(fn (Order $record) => $record->approve());
Záznam je přítomný u řádkových akcí; je null u surface bez záznamu (strukturální viditelnost sloupce/filtru, pole, widgety), takže jednoargumentová closura fn ($user) => … zůstává platná všude.
Tohle řídí, zda celý sloupec/akce strukturálně existuje (vyhodnoceno jednou). Pro skrytí nebo redakci jedné buňky na řádek — např. zobrazit salary jen na záznamech, které uživatel smí vidět — použijte místo toho visibleForRecord() sloupce, který běží při renderu buňky se záznamem daného řádku:
TextColumn::make('salary') ->visibleForRecord(fn ($record) => auth()->user()->can('viewSalary', $record));
Policies tabulky
Zapněte kontroly policies na tabulce pomocí authorize().
use NyonCode\WireTable\Table; public function table(Table $table): Table{ return $table ->model(Order::class) ->authorize() ->columns([ // ... ]);}
Wire kontroluje tyto policy metody, když jsou potřeba:
| Schopnost tabulky | Policy ability |
|---|---|
| Vytvořit záznam | create |
| Aktualizovat záznam | update |
| Smazat záznam | delete |
| Zobrazit záznam | view |
Přepisy tabulky
Přepisy použijte, když tabulka potřebuje pravidla odlišná od policy modelu.
return $table ->model(Order::class) ->authorize() ->authorizeCreate(fn () => auth()->user()?->can('create', Order::class) ?? false) ->authorizeUpdate(fn (Order $record) => ! $record->is_locked) ->authorizeDelete(fn (Order $record) => $record->status === 'draft') ->authorizeView(fn (Order $record) => $record->tenant_id === auth()->user()?->tenant_id);
Každý přepis přijímá boolean nebo closuru.
Inline editace
Editovatelné sloupce mohou pro inline editaci vyžadovat Gate ability.
TextColumn::make('price') ->editable() ->authorizeInline('orders.update-price');
Pokud uživatel neprojde kontrolou ability, sloupec zůstane viditelný, ale inline editace je zamítnuta.
Akce
Akce lze skrýt nebo zamítnout pomocí Gate abilities, permission řetězců nebo vlastních callbacků.
Action::make('refund') ->label('Refund') ->authorize('refund') ->visible(fn (Order $record) => $record->is_paid) ->requiresConfirmation() ->action(fn (Order $record) => $record->refund());
Pro jednoduché permission řetězce:
Action::make('export') ->permission('orders.export') ->action(fn () => $this->exportTable());
Formuláře
Formuláře mohou používat policies modelu pro create a update.
use NyonCode\WireForms\Forms\Form; public function form(Form $form): Form{ return $form ->model($this->user ?? User::class) ->authorize() ->schema([ // ... ]);}
Když je authorize() zapnuto:
| Stav formuláře | Policy ability |
|---|---|
| Třída modelu nebo neuložený model | create |
| Existující instance modelu | update |
Při zamítnutí je formulář read-only a nelze ho uložit.
Pro vlastní pravidla formuláře:
return $form ->model($this->user) ->authorizeUsing(fn (User $user) => $user->hasRole('editor')) ->schema([ // ... ]);
Sortable
Sortable operace by měly být chráněné v hoocích vaší Livewire komponenty.
public function beforeRowsReordered(array $orderedIds): void{ $this->authorize('reorder', Task::class);}
Lifecycle hooky viz Sortable řazení řádků.
Související dokumentace
| Dokument | Co pokrývá |
|---|---|
| Core Akce | Řádkové, hromadné, hlavičkové akce a modální akce |
| Přehled tabulek | Nastavení tabulky a API na úrovni tabulky |
| Přehled formulářů | Nastavení formuláře a chování ukládání |
| Audit Log | Záznam změn modelů po úspěšné autorizaci |