NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Connections for Laravel

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 Gate
use 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 deny

Odporúč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 wildcards

Neaktí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 kryptomien

Odoslaní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.