Overovanie prístupu
Čítanie patrí modelu, nie fasáde — využije relácie, ktoré ste prípadne načítali vopred. Fasáda odpovedá iba na otázky o katalógu, napríklad Permissions::exists():
$user->hasRole('administrator'); // bool
$user->hasRole(['administrator', 'editor']); // any of
$user->hasPermissionTo('auth.users.view'); // effective: direct or via a role
$user->getRoleNames(); // Collection<string>
$user->getPermissionNames(); // Collection<string> — direct grants only
$user->getDirectPermissions(); // direct grants only
$user->getAllPermissions(); // direct ∪ via-roles, de-duped — the JWT claim source
$user->getAllPermissions()->pluck('name');- hasRole() — true, ak model drží ktorúkoľvek z uvedených rolí (reťazec, enum alebo iterovateľnú štruktúru názvov, enumov a modelov Role).
- hasPermissionTo() — na držiteľovi overuje efektívne oprávnenia: priame plus všetko zdedené z rolí. Na modeli Role overuje vlastné oprávnenia roly.
- getDirectPermissions() / getPermissionNames() — iba priame oprávnenia.
- getAllPermissions() — priame ∪ z rolí, bez duplicít podľa id.
Kontroly nikdy nevyhadzujú výnimku: pre neznámy názov roly či oprávnenia jednoducho vrátia false.
Eager loading
Kontroly použijú načítané relácie, ak sú k dispozícii. Načítajte vopred roles.permissions a permissions a overíte veľa držiteľov bez N+1 dopytov — výsledok je rovnaký pri eager aj lazy načítaní:
$users = User::query()->with(['roles.permissions', 'permissions'])->get();
foreach ($users as $user) {
$user->getAllPermissions(); // read from the loaded relations — no extra queries
}Oprávnenia v tokenoch
V API službe je getAllPermissions() prirodzeným zdrojom pre claim oprávnení v tokene:
$claims = [
'roles' => $user->getRoleNames()->all(),
'permissions' => $user->getAllPermissions()->pluck('name')->all(),
];Query scope
Držiteľov podľa roly vyfiltrujete scopom role() — vráti modely, ktoré držia ktorúkoľvek z uvedených rolí:
User::query()->role('administrator')->count();
User::query()->role(['administrator', 'editor'])->get();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.