Oprávnenia
Každé prepojenie nesie vlastnú sadu reťazcov oprávnení — ľubovoľné názvy, ktoré vaša aplikácia používa, napríklad view, edit alebo publish. Tie isté dva modely tak môžu mať v rôznych kontextoch rôzne práva. Duplicity sa odstraňujú automaticky.
Zmena oprávnení
use RoundlyConsulting\Connections\Facades\Connections;
$permissions = Connections::between($user, $team)->permissions();
$permissions->grant('publish'); // Connection — creates the connection if absent
$permissions->revoke('publish'); // Connection — throws ConnectionNotFound if absent
$permissions->sync('view', 'edit'); // Connection — exact set, creates if absent
$permissions->clear(); // Connection — remove every permission; throws ConnectionNotFound if absent
$permissions->all(); // Collection<int, string> — what is stored
$permissions->has('edit'); // bool
$permissions->hasAny('view', 'edit'); // bool
$permissions->hasAll('view', 'edit'); // bool- grant() pridá oprávnenia do sady a chýbajúce prepojenie vytvorí.
- revoke() oprávnenia odoberie; ak prepojenie neexistuje, vyhodí ConnectionNotFound.
- sync() nahradí sadu presne zadanými oprávneniami a chýbajúce prepojenie vytvorí.
- clear() sadu vyprázdni a na rozdiel od sync() prepojenie nikdy nevytvorí — ak neexistuje, vyhodí ConnectionNotFound.
- Oprávnenia zadávajte explicitne — grant() a sync() nepoužijú oprávnenia pripravené cez withPermissions().
- ConnectionPermissionsChanged sa spustí, len keď sa sada naozaj zmení, a nesie predošlý aj aktuálny zoznam.
Trait ponúka tie isté úpravy ako metódy modelu — skratky, ktoré idú cez ten istý manažér:
$user->grantThroughConnection($team, 'publish', 'archive');
$user->revokeThroughConnection($team, 'archive');
$user->syncConnectionPermissions($team, ['view', 'edit']);
$user->clearConnectionPermissions($team);
$user->permissionsThroughConnection($team); // Collection<int, string> of the stored setOverovanie oprávnení
use RoundlyConsulting\Connections\Facades\Connections;
Connections::between($user, $team)->permissions()->has('edit'); // bool
Connections::between($user, $team)->permissions()->hasAny('view', 'edit'); // bool
Connections::between($user, $team)->permissions()->hasAll('view', 'edit'); // bool
// Trait shorthand — the same checks from the connector's side.
$user->hasPermissionThroughConnection($team, 'edit'); // bool
$user->hasPermissionThroughConnection($team, 'edit', force: true);// bypass the cache
$user->hasAnyPermissionThroughConnection($team, 'view', 'edit'); // bool
$user->hasAllPermissionsThroughConnection($team, 'view', 'edit'); // bool
// On a Connection row you already hold.
$connection->hasPermission('edit'); // bool
$connection->hasAnyPermission('view', 'edit'); // bool
$connection->hasAllPermissions('view', 'edit'); // boolKontroly idú od connectora ku connectable a permissions()->has() je tá istá kontrola ako hasPermissionThroughConnection() v traite. Kým je zapnuté enforce_active_on_check (predvolene áno), prepojenie v stave pending, blocked alebo po expirácii neudelí nič. Kontroly sa v rámci requestu pamätajú pre každú dvojicu — cache obídete, keď metóde traitu odovzdáte force: true (pozrite Kešovanie).
permissions()->all() aj permissionsThroughConnection() z traitu vrátia uloženú sadu bez ohľadu na stav či expiráciu — na rozhodovanie o prístupe používajte metódy kontroly.
Zástupné znaky
Prepojenie, ktorého sada obsahuje *, prejde akoukoľvek kontrolou oprávnenia, a segmentový zástupný znak ako posts.* zodpovedá posts.edit. Sady bez zástupného znaku sa správajú presne ako doteraz — ide čisto o voľbu podľa uložených dát:
Connections::between($user, $team)->withPermissions('posts.*')->connect();
$user->hasPermissionThroughConnection($team, 'posts.edit'); // true
$user->hasPermissionThroughConnection($team, 'users.edit'); // false
Connections::between($admin, $team)->withPermissions('*')->connect();
$admin->hasPermissionThroughConnection($team, 'anything'); // trueZástupné znaky rešpektujú aj scope withPermission() a connectionsWithPermission(): zodpovedá im presné oprávnenie, * aj koncové segmentové zástupné znaky ako posts.* či posts.comments.*. Iný tvar vzoru — napríklad posts.*.edit — rešpektujú len hasPermission() a hasPermissionThroughConnection().
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.