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

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');  // ?Role

Zaregistrujte 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']);  // true

Prázdny názov oprávnenia neprejde nikdy, ani s *.

Drivery rolí

roles.providerTriedaSprávanie
arrayInMemoryRoleProviderPredvolené. Roly zaregistrované pri štarte žijú v pamäti počas celého procesu — rýchle a verzované v gite.
databaseDatabaseRoleProviderUkladá roly do tabuľky team_roles (upsert podľa kľúča); mapu rolí načíta najviac raz za request alebo job vo fronte.
database + cacheCachedRoleProviderObalí 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 key

register() 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        # seconds

Odobraté 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 | Permissions

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.