Roly pre konkrétny tím
Zapnite roles.per_team a každý tím sa môže odchýliť od globálnych rolí — Editor jedného tenanta tak môže mať viac práv ako u iného. Úprava pre dvojicu (tím, kľúč) má prednosť pred globálnou definíciou; ostatné kľúče sa načítajú z globálnych rolí. Keď je prepínač vypnutý, rola sa načíta priamo z globálneho providera bez dopytov navyše:
// .env → TEAMS_PER_TEAM_ROLES=true
Teams::roles()->register('editor', 'Editor', ['posts.edit']); // global baseline
Teams::for($team)->roles()->define(
'editor',
'Senior Editor',
['posts.edit', 'posts.publish'],
'Editor with publishing rights for this workspace',
);
// or: $team->defineRole('editor', 'Senior Editor', ['posts.edit', 'posts.publish']);
$user->can('teams.posts.publish', $team); // true for THIS team only
Teams::for($team)->roles()->all(); // effective map — global roles merged with overrides
Teams::for($team)->roles()->find('editor'); // ?Role — the override when one existsroles()->define() vytvorí alebo aktualizuje riadok team_role_overrides podľa (team_id, key) — opätovným volaním úpravu zmeníte; mäkko zmazaná úprava sa obnoví a nanovo definuje. Oprávnenia môžu byť reťazce aj objekty Permission; ukladajú sa len ich kľúče.
Načítanie rolí pre tím
use RoundlyConsulting\Teams\Roles\TeamRoleResolver;
$resolver = app(TeamRoleResolver::class);
$resolver->resolve($team, 'editor'); // ?Role — the team's override if any, else the global role
$resolver->all($team); // array<string, Role>
$team->teamRoles()->where('key', 'editor')->first()?->toRole(); // one override as a RoleMember::role() ide cez resolver, len kým je per_team zapnuté — pri vypnutom sa úpravy ignorujú, aj keď riadky existujú. TeamRoleResolver je singleton v kontajneri, ktorý môžete nahradiť.
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.