Udeľovanie oprávnení
Oprávnenia udeľujte cez Permissions::for($holder). givePermissionTo je aditívne — nikdy neodoberie oprávnenia, ktoré zaregistroval niekto iný — takže nezávislé služby si môžu bezpečne registrovať vlastné oprávnenia. syncPermissions je autoritatívne: zadaná množina sa stane úplnou množinou. Rovnaké metódy na modeli sú len skratkou pre tie isté volania:
use RoundlyConsulting\Permissions\Facades\Permissions;
Permissions::for($role)->givePermissionTo('auth.users.view', 'auth.users.edit'); // additive
Permissions::for($role)->syncPermissions(['auth.users.view']); // exact set
Permissions::for($role)->revokePermissionTo('auth.users.view');
// The same, on the model — the trait delegates to the same manager:
$role->givePermissionTo('auth.users.view', 'auth.users.edit');
$role->syncPermissions(['auth.users.view']);
$role->revokePermissionTo('auth.users.view');Akceptované argumenty
Každá metóda prijíma názvy oprávnení, backed enumy, modely Permission, polia aj vnorené iterovateľné štruktúry — ľubovoľne kombinované a bez duplicít. givePermissionTo a revokePermissionTo sú variadické; syncPermissions prijíma jednu iterovateľnú štruktúru:
$role->givePermissionTo('auth.users.view'); // one name
$role->givePermissionTo('auth.users.view', 'auth.users.edit'); // variadic
$role->givePermissionTo(['auth.users.view', 'auth.users.edit']); // an array
$role->givePermissionTo([$permission, PermissionName::EditUsers]); // models + backed enums
$role->revokePermissionTo('auth.users.view', 'auth.users.edit'); // variadic too
$role->syncPermissions([$permission, 'auth.users.edit']); // one iterableNeznámy názov vyhodí PermissionDoesNotExist; neuložený model Permission vyhodí PermissionException. Oprávnenia pred udelením zaregistrujte cez Permissions::permission() alebo Permissions::syncFrom().
Priame oprávnenia na modeli
Tie isté metódy fungujú na každom modeli s HasRoles a spravujú jeho priame oprávnenia nezávisle od rolí. syncPermissions na používateľovi nahradí iba priamu množinu — oprávnenia zdedené z rolí zostanú nedotknuté:
// Direct grants on the user itself — independent of any role
Permissions::for($user)->givePermissionTo('reports.export');
Permissions::for($user)->syncPermissions(['reports.export', 'reports.schedule']); // replaces the direct set only
Permissions::for($user)->revokePermissionTo('reports.schedule');
$user->givePermissionTo('reports.export'); // the trait shorthandPrečo na aditívnosti záleží
Moduly môžu udeľovať oprávnenia tej istej role bez vzájomnej koordinácie:
// Billing module
$role->givePermissionTo('billing.invoices.view');
// Reports module — registers independently, never strips billing's grant
$role->givePermissionTo('reports.export');
$role->getPermissionNames(); // billing.invoices.view + reports.exportRežimy udeľovania
Obe správania modeluje enum GrantMode:
use RoundlyConsulting\Permissions\Enums\GrantMode;
GrantMode::Additive->detaches(); // false — givePermissionTo()
GrantMode::Authoritative->detaches(); // true — syncPermissions()Každý zápis oprávnení beží v databázovej transakcii, takže súbežná kontrola cez Gate nikdy neuvidí napoly vykonanú synchronizáciu, a každý zápis po potvrdení transakcie invaliduje cache katalógu oprávnení.
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.