Roly sú pomenované balíky oprávnení. Členstvo si ukladá len kľúč roly; samotná rola sa načíta cez role provider, ktorý vráti Teams::roles(). Roly registrujte v metóde boot() service providera — kľúč, zobrazovaný názov, voliteľné oprávnenia (reťazce alebo objekty Permission) a voliteľný popis. Oprávnenie * udeľuje všetko:
use RoundlyConsulting\Teams\Facades\Teams;
use RoundlyConsulting\Teams\Roles\Permission;
// In a service provider's boot() method:
Teams::roles()->register('owner', 'Owner', ['*']);
Teams::roles()->register('admin', 'Admin', ['*']);
Teams::roles()->register(
'editor',
'Editor',
['posts.edit', new Permission('posts.publish', 'Publish posts')],
description: 'Can edit and publish content.',
);
Teams::roles()->register('member', 'Member', ['posts.view']);
Teams::roles()->all(); // array<string, Role>
Teams::roles()->find('editor'); // ?RoleZaregistrujte každý kľúč, ktorý vaša aplikácia prideľuje — vrátane owner, admin a member, ktoré balík sám prideľuje pri vytvorení tímu, prevode vlastníctva a schválení žiadosti (nastaviteľné v roles.*). Členstvo s nezaregistrovaným kľúčom nemá žiadnu rolu ani oprávnenia.
Objekt Role
$role = Teams::roles()->find('editor');
$role->key; // 'editor'
$role->name; // 'Editor'
$role->description; // 'Can edit and publish content.'
$role->permissions; // ['posts.edit', 'posts.publish']
$role->permissionObjects; // list<Permission>
$role->hasPermission('posts.publish'); // '*' grants everything
$role->hasAnyPermission(['posts.delete', 'posts.edit']); // true
$role->hasAllPermissions(['posts.edit', 'posts.publish']); // truePrázdny názov oprávnenia neprejde nikdy, ani s *.
Drivery rolí
| roles.provider | Trieda | Správanie |
|---|---|---|
array | InMemoryRoleProvider | Predvolené. Roly zaregistrované pri štarte žijú v pamäti počas celého procesu — rýchle a verzované v gite. |
database | DatabaseRoleProvider | Ukladá roly do tabuľky team_roles (upsert podľa kľúča); mapu rolí načíta najviac raz za request alebo job vo fronte. |
database + cache | CachedRoleProvider | Obalí databázový driver; mapu rolí drží v cache a vyprázdni ju pri každej zmene definície roly. |
Roly v databáze
Nastavte roles.provider na database a to isté volanie Teams::roles()->register() vytvorí alebo aktualizuje riadok v team_roles podľa kľúča, takže admini môžu roly spravovať za behu. Overovanie oprávnení sa nemení:
// .env → TEAMS_ROLES_PROVIDER=database
Teams::roles()->register('editor', 'Editor', ['posts.edit', 'posts.publish'], description: 'Writes posts'); // upserts a team_roles row by keyregister() je pri oboch driveroch upsert podľa kľúča: opätovná registrácia kľúča nahradí názov, oprávnenia aj popis a mäkko zmazaná definícia sa obnoví namiesto nového vloženia. Vrátený objekt Role slúži len na čítanie — rolu zmeníte opätovnou registráciou.
Cache pre databázový driver
Nastavením roles.cache.enabled uložíte mapu rolí z databázy do cache. Pri každom Teams::roles()->register() sa vyprázdni — úložiská s tagmi podľa tagu, ostatné zmazaním jedného kľúča. Cache obaľuje len databázový driver:
TEAMS_ROLES_PROVIDER=database
TEAMS_ROLES_CACHE=true
TEAMS_ROLES_CACHE_STORE=redis # null = the default store
TEAMS_ROLES_CACHE_KEY=teams.roles
TEAMS_ROLES_CACHE_TTL=3600 # secondsOdobraté oprávnenia v dlho bežiacich procesoch
Role provider je v kontajneri zaregistrovaný ako scoped: mapu rolí načíta najviac raz za request alebo job vo fronte (queue workery aj Octane začínajú každý s novým providerom), takže oprávnenie odobraté v inom procese prestane platiť od nasledujúceho requestu či jobu. Uloženie alebo zmazanie definície roly, či už cez register(), alebo priamo cez model RoleDefinition z administrácie, okamžite vyprázdni mapu aktuálneho procesu aj zdieľanú cache a cache sa vždy plní z tabuľky, nikdy zo staršej kópie niektorého workera.
Výpis rolí
php artisan teams:roles # Key | Name | PermissionsPrejavte 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.