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

Roly definované tenantom

Pri zapnutých priradeniach môže rola patriť jednému vlastníkovi — tenantovi, tímu —, takže dvaja tenanti si môžu každý zadefinovať rolu reviewer bez kolízie navzájom aj s globálnou rolou reviewer. Oprávnenia zostávajú globálnymi konštantami v kóde; vlastníka majú len roly:

use RoundlyConsulting\Permissions\Facades\Permissions;

Permissions::owner($tenant)->role('reviewer')->givePermissionTo('posts.review'); // find or create
Permissions::owner($tenant)->findRole('reviewer');              // ?Role
Permissions::owner($tenant)->roles();                           // Collection<int, Role>, by name
Permissions::owner($tenant)->syncRolesFrom(TenantRole::class);  // SyncResult, additive

Permissions::for($user)->in($tenant)->assignRole('reviewer');   // the tenant's own reviewer

owner()->role() rolu nájde alebo vytvorí bezpečne aj pri súbehu vďaka unikátnemu indexu (owner_key, name), a to cez váš nastavený model roly. syncRolesFrom() zaregistruje jednu rolu vlastníka za každý prípad enumu, aditívne, rovnako ako globálna verzia.

Ktorú rolu názov znamená

V rámci rozsahu sa názov roly vyhodnotí najprv ako vlastná rola rozsahu, potom ako rola ďalšieho vlastníka, ktorého pre tento rozsah zaregistrujete, a nakoniec ako globálna rola; neznámy názov vyhodí RoleDoesNotExist. Rolu s vlastníkom možno priradiť len v rozsahu jej vlastníka — model Role s vlastníkom odovzdaný kdekoľvek inde, v inom rozsahu, pri zápise bez rozsahu či v assignRole() z 2.0, vyhodí PermissionException. Rozšíriť to môžete resolverom:

use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Permissions\Facades\Permissions;

// A project uses the roles its tenant defined
Permissions::resolveRoleOwnerUsing(
    fn (Model $scope): ?Model => $scope instanceof Project ? $scope->tenant : null,
);

Permissions::for($user)->in($project)->assignRole('reviewer'); // the tenant's reviewer

Globálne slovesá vidia globálne roly

Pri zapnutom prepínači pracujú slovesá katalógu z 2.0 len s globálnymi rolami: role(), findRole(), roles(), syncRolesFrom(), Role::findOrCreate(), vyhodnotenie názvu v assignRole() bez rozsahu aj query scope role() roly s vlastníkom ignorujú. Rola pozná svojho vlastníka:

$role->owner;      // the owning model (MorphTo), null for a global role
$role->isOwned();  // bool

owner_type a owner_key sú pri serializácii roly skryté, pretože nesú názov triedy; owner_id nie. Permissions::forgetScope($tenant) zmaže roly, ktoré tenant vlastní, spolu s jeho priradeniami, a pruneOrphans() prečistí roly, ktorých vlastník už neexistuje.

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.