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 reviewerowner()->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 reviewerGlobá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(); // boolowner_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 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.