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

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 iterable

Nezná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 shorthand

Preč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.export

Rež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 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.