Fasáda Connections
Fasáda Connections je verejné API balíka — dostanete sa cez ňu ku každej operácii a je to odporúčaný spôsob použitia. Jej koreňom je RoundlyConsulting\Connections\ConnectionManager, singleton v kontajneri, a metódy traitu HasConnections delegujú na ten istý manažér (ďalšie vstupné body opisuje časť DI a akcie):
| Metóda | Vracia | Účel |
|---|---|---|
Connections::between($connector, $connectable) | PendingConnection | Plynulý builder pre jednu dvojicu. |
Connections::from($connector) | PendingConnection | Builder, ktorému connectable doplníte neskôr (to(), toMany()), alebo zosúladenie cez sync(). |
Connections::expiring(int $days = 7) | Builder<Connection> | Všetky živé prepojenia, ktoré vypršia v danom okne, naprieč všetkými connectormi. |
Connections::prune() | int | Soft-delete expirovaných prepojení; vráti ich počet. |
Connections::flushCache() | void | Vyprázdni cache oprávnení v rámci requestu. |
Connections::fake() | ConnectionFake | Zaznamenávajúci fake pre testy — pozrite Testovanie. |
between() začne builder pre dvojicu; from() začne builder pre connector a connectable doplníte neskôr cez to():
use RoundlyConsulting\Connections\DataTransferObjects\SyncTarget;
use RoundlyConsulting\Connections\Facades\Connections;
// Create the connection, or update the pair's existing one, with permissions and an expiry.
Connections::between($user, $team)
->withPermissions('view', 'edit')
->expiresIn(now()->addMonth()) // CarbonInterface, CarbonInterval, or seconds
->connect();
// Defer the connectable until later with from()->to().
Connections::from($user)->to($team)->withPermissions('view')->connect();
// Move the expiry, or clear it with null.
Connections::between($user, $team)->extend(now()->addYear());
Connections::between($user, $team)->extend(null);
// Look the pair up.
Connections::between($user, $team)->exists(); // bool — an active connection exists
Connections::between($user, $team)->find(); // ?Connection — in any status
// Remove the connection (soft delete).
Connections::between($user, $team)->disconnect();
// Reconcile a connector to exactly this set (connect missing, disconnect extras).
Connections::from($user)->sync([$teamA, new SyncTarget($teamB, permissions: ['read'])]); // SyncResult
// Connections expiring within 14 days, across every connector.
Connections::expiring(14)->with('connector')->get();
// Remove all expired connections, returning how many were removed.
$removed = Connections::prune();
// Drop the in-request permission cache mid-request (it already resets per request / job).
Connections::flushCache();Cache sa pri každom zápise automaticky invaliduje, takže kontrola po zápise zmenu zohľadní aj bez parametra force.
Príprava prepojenia
Modifikátory len pripravia stav na builderi; nič sa nezapíše, kým nezavoláte terminálne sloveso:
use Carbon\CarbonInterval;
use RoundlyConsulting\Connections\Facades\Connections;
$connection = Connections::from($user)
->to($team) // the connectable (or start with between())
->withPermissions('view', 'edit') // staged permissions, de-duplicated
->withPermissions('publish') // repeated calls add to the staged set
->expiresIn(CarbonInterval::days(30)) // CarbonInterface, CarbonInterval or seconds
->withMeta(['source' => 'signup']) // merged into the meta bag
->connect(); // terminal verb: returns the Connection- to($connectable) — nastaví connectable, ak builder začal cez from().
- toMany($connectables) — pripraví viac connectables pre hromadné slovesá (pozrite Hromadné operácie a sync).
- withPermissions(...$permissions) — pripraví oprávnenia; ďalšie volania ich pridávajú a duplicity sa odstránia.
- expiresIn($value) — okamih CarbonInterface, CarbonInterval od teraz alebo celé číslo sekúnd od teraz.
- expiringAt(?$instant) — presný okamih expirácie alebo null bez expirácie.
- withMeta($array) / replaceMeta() — pripraví metadáta; zlúčia sa s uloženými, pokiaľ nezavoláte replaceMeta().
- asPending() — vytvorí prepojenie v stave pending; invite() je skratka pre asPending()->connect().
Terminálne slovesá
| Sloveso | Vracia | Čo robí |
|---|---|---|
connect() | Connection | Vytvorí dvojicu, pri existujúcom prepojení zmení len pripravené; oživí soft-deleted dvojicu. |
invite() | Connection | connect() v stave pending; nad prijatým či zablokovaným prepojením vyhodí InvalidStatusTransition. |
accept() / block() | Connection | Zmení stav; ak prepojenie neexistuje, vyhodí ConnectionNotFound. Blokovanie zruší jedine accept(). |
disconnect() | void | Soft delete; ak prepojenie neexistuje, vyhodí ConnectionNotFound. |
toggle() | ?Connection | Aktívne prepojenie odpojí (vráti null), inak prepojí — blokovanie nezruší a expiráciu neobnoví. |
reconnect() / restore() | Connection | Obnoví soft-deleted prepojenie s jeho oprávneniami, expiráciou a meta, alebo vytvorí nové. |
permissions() | ConnectionPermissions | Sada oprávnení dvojice: grant, revoke, sync, clear, all, has, hasAny, hasAll — pozrite Oprávnenia. |
extend(?$expiresAt) | Connection | Posunie alebo zruší expiráciu; vyhodí ConnectionNotFound. |
exists() | bool | Či je dvojica prepojená (pri zapnutom enforce_active_on_check len aktívne). |
find() | ?Connection | Prepojenie dvojice v ľubovoľnom stave, alebo null, ak neexistuje (či je soft-deleted). |
sync($connectables) | SyncResult | Zosúladí connector presne s touto množinou položiek Connectable alebo SyncTarget — pozrite Hromadné operácie a sync. |
connectAll() / grantAll() / revokeAll() | Collection | Hromadné slovesá nad cieľmi z toMany(). |
disconnectAll() | void | Hromadné odpojenie cieľov z toMany(). |
Sada oprávnení permissions()
between()->permissions() je sada oprávnení jedného prepojenia — grant(), revoke(), sync() a clear() ju menia; all(), has(), hasAny() a hasAll() ju čítajú (pozrite Oprávnenia):
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'); // boolOpätovné prepojenie je bezpečné
Dvojica má najviac jeden riadok prepojenia a connect() nad dvojicou, ktorá ho už má, zmení len to, čo pripravíte: stav, oprávnenia, expirácia aj meta zostanú, pokiaľ ich znova nezadáte (meta sa zlučuje — pozrite Metadáta). Predvolené hodnoty z konfigurácie — default_permissions, default_status a expiry.default — platia len pre nové prepojenia. Expiráciu zrušíte cez extend(null); ak chcete zmeniť jediný atribút, použite jeho vlastné sloveso:
Connections::between($user, $team)
->withPermissions('view', 'edit')
->expiresIn(now()->addMonth())
->connect();
// Re-connecting only changes what you stage: status, permissions and expiry are kept.
Connections::between($user, $team)->withMeta(['note' => 'hi'])->connect(); // merge; perms + expiry kept
// Config defaults (default_permissions, default_status, expiry.default) apply to new
// connections only. To clear an expiry or change one attribute, use its dedicated verb:
Connections::between($user, $team)->extend(null);
Connections::between($user, $team)->permissions()->grant('publish');
Connections::between($user, $team)->accept();Po disconnect() alebo upratovaní connect() — a tiež grant(), permissions()->sync(), invite(), toggle() a sync() — oživí dvojicu ako nové prepojenie; výnimkou je zablokovaná dvojica, ktorá zostane zablokovaná (pozrite Pozvánky a stavy).
Terminálne slovesá potrebujú connectable. Ak jedno zavoláte po from() bez to() — alebo hromadné sloveso bez toMany() — vyhodí sa MissingConnectable:
Connections::from($user)->connect(); // throws MissingConnectable — call to() first
Connections::from($user)->connectAll(); // throws MissingConnectable — call toMany() firstPrejavte 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.