Integrácia s Gate
Nastavte register_gate na true a balík zaregistruje Gate hook, takže vaša aplikácia môže autorizovať cez prepojenia. Kedy hook odpovedá, určíte cez gate_mode, a či sa počítajú zástupné oprávnenia, cez gate_wildcards:
CONNECTIONS_REGISTER_GATE=true
CONNECTIONS_GATE_MODE=after # recommended — a policy deny always wins
CONNECTIONS_GATE_WILDCARDS=false # optional — only exact grants answer through the Gateuse Illuminate\Support\Facades\Gate;
$user->can('publish', $team); // true when $user has 'publish' on $team
Gate::forUser($user)->allows('publish', $team); // the same check
Gate::authorize('publish', $team); // throws AuthorizationException when nothing grants it- Názov ability je reťazec oprávnenia; kontrola volá hasPermissionThroughConnection(), takže platia zástupné znaky (ak gate_wildcards nevypnete), cache aj enforce_active_on_check.
- Hook odpovedá, len ak sú používateľ aj prvý argument Eloquent modely implementujúce Connectable — hosťa či kontrolu bez argumentu Connectable nechá na Gate.
- Vráti true, ak prepojenie abilitu udeľuje, inak null — sám nikdy nezamieta.
- Direktíva @can v Blade aj route middleware can: idú cez ten istý Gate.
- Predvolene je vypnutý, aby inštalácia balíka nikdy neprekvapila vlastnú autorizáciu aplikácie.
Pred policies alebo po nich
gate_mode určuje, kde hook stojí voči vašim policies a abilitám z Gate::define():
- before (predvolené) zaregistruje hook Gate::before. Prepojenie, ktoré abilitu udeľuje, ju povolí ešte pred spustením akejkoľvek policy — uložená * tak prebije policy, ktorá zamieta, a to aj pri delete.
- after zaregistruje hook Gate::after. Odpovedá, len ak žiadna policy, definícia ability ani iný before hook nevrátili výsledok; Laravel ponechá prvú odpoveď, ktorá nie je null, takže zamietnutie vždy vyhrá bez ohľadu na to, aké široké oprávnenie je uložené. Policy, ktorá povoľuje, povolí aj bez prepojenia.
// CONNECTIONS_GATE_MODE=after
Gate::policy(Team::class, TeamPolicy::class); // delete() returns false, update() returns null
$user->connectTo($team, ['*']);
$user->can('delete', $team); // false — the policy denied, the connection is never asked
$user->can('update', $team); // true — no policy method answered, so the connection did
// CONNECTIONS_GATE_MODE=before (the default)
$user->can('delete', $team); // true — the stored * is checked first and overrides the denyOdporúčame after. Vo verzii 2.1 zostáva predvolené before, aby existujúce aplikácie, ktoré sa spoliehajú na to, že oprávnenie z prepojenia prebije policy, fungovali ďalej; nasledujúca hlavná verzia urobí predvoleným after — ak na tomto správaní závisíte, nastavte gate_mode na before výslovne. Iná hodnota než before alebo after vyhodí InvalidConfigurationException s názvom kľúča; prázdna hodnota znamená before.
Len presné oprávnenia
Ak gate_wildcards nastavíte na false, cez Gate odpovedá len oprávnenie s presným názvom ability. Uložená * či posts.* potom pri otázke cez Gate nepovolí každú abilitu; hasPermissionThroughConnection() a ostatné priame kontroly zástupné znaky naďalej rešpektujú. Platí to v oboch režimoch:
// CONNECTIONS_GATE_WILDCARDS=false
$user->connectTo($everything, ['*']);
$user->connectTo($posts, ['posts.*']);
$user->connectTo($exact, ['posts.delete']);
$user->can('delete', $everything); // false — a wildcard no longer answers through the Gate
$user->can('posts.delete', $posts); // false
$user->can('posts.delete', $exact); // true — the grant names the exact ability
$user->hasPermissionThroughConnection($everything, 'delete'); // true — direct checks still honour wildcardsNeaktívne prepojenia pri enforce_active_on_check neudelia nič ani s presným oprávnením. Hodnota gate_wildcards, ktorá nie je logická, vyhodí pri otázke cez Gate InvalidConfigurationException s názvom kľúča.
Prechod na verziu 2.1
Pri zapnutej integrácii s Gate prepojenie s * povolilo každú abilitu na prepojenom modeli — vrátane delete — aj proti policy, ktorá ju zamietla. Verzia 2.1.0 nepridáva migráciu a nemení žiadnu predvolenú hodnotu; túto medzeru uzavriete nastavením gate_mode na after, prípadne gate_wildcards na false, ak sa zástupné znaky k Gate nemajú dostať vôbec.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.