Prepojiteľné modely
Na každý model, ktorý sa má zúčastňovať na prepojeniach, pridajte trait HasConnections a implementujte kontrakt Connectable:
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Connections\Concerns\HasConnections;
use RoundlyConsulting\Connections\Contracts\Connectable;
class User extends Model implements Connectable
{
use HasConnections;
}
class Team extends Model implements Connectable
{
use HasConnections;
}Prepojenia sú smerované. Connector je strana, ktorá prepojenie vytvára; connectable je strana, na ktorú smeruje. Model môže mať obe roly — používateľ sa môže prepojiť s tímom a tím s projektom:
$user->connectTo($team, ['view']);
$user->hasPermissionThroughConnection($team, 'view'); // true — $user → $team exists
$team->hasPermissionThroughConnection($user, 'view'); // false — there is no $team → $user connection
$user->connections; // connections $user initiated (it is the connector)
$team->connectors; // connections pointing at $team (it is the connectable)Generovanie cez make:connectable
php artisan make:connectable Organisation # writes app/Models/Organisation.php
php artisan make:connectable User --existing # prints the lines to add to an existing modelBez --existing príkaz vytvorí nový model — do app/Models, ak tento priečinok existuje — ktorý už používa trait a implementuje kontrakt:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Connections\Concerns\HasConnections;
use RoundlyConsulting\Connections\Contracts\Connectable;
class Organisation extends Model implements Connectable
{
use HasConnections;
}Metódy traitu
HasConnections sprístupní ten istý životný cyklus ako metódy modelu — skratky nad fasádou Connections. Každý zápis ide cez ConnectionManager, takže volania traitu zachytí aj vlastná väzba manažéra, aj Connections::fake():
$user->connectTo($team, ['view', 'edit'], now()->addMonth()); // Connection
$user->disconnectFrom($team); // void
$user->grantThroughConnection($team, 'publish'); // Connection
$user->revokeThroughConnection($team, 'publish'); // Connection
$user->syncConnectionPermissions($team, ['view']); // Connection
$user->clearConnectionPermissions($team); // Connection
$user->permissionsThroughConnection($team); // Collection<int, string>
$user->syncConnections([$teamA, $teamB]); // SyncResult| Metóda | Vracia | Čo robí |
|---|---|---|
connectTo($connectable, $permissions = null, $expiresAt = null, $meta = null) | Connection | Vytvorí prepojenie, pri existujúcom zmení len to, čo zadáte. |
disconnectFrom($connectable) | void | Soft delete; ak prepojenie neexistuje, vyhodí ConnectionNotFound. |
toggleConnection($connectable, $permissions = null) | ?Connection | Aktívne prepojenie odpojí, inak prepojí. |
reconnectTo($connectable) | Connection | Obnoví soft-deleted prepojenie v pôvodnej podobe alebo vytvorí nové. |
inviteConnection($connectable) | Connection | Vytvorí prepojenie v stave pending; nad prijatým či zablokovaným vyhodí InvalidStatusTransition. |
acceptConnectionFrom($connector) | Connection | Prijímajúca strana: prijme prepojenie od $connector. |
blockConnectionFrom($connector) | Connection | Prijímajúca strana: zablokuje prepojenie od $connector. |
grantThroughConnection($connectable, ...$permissions) | Connection | Pridá oprávnenia; chýbajúce prepojenie vytvorí. |
revokeThroughConnection($connectable, ...$permissions) | Connection | Odoberie oprávnenia; ak prepojenie chýba, vyhodí ConnectionNotFound. |
syncConnectionPermissions($connectable, $permissions) | Connection | Nastaví presne túto sadu (pole alebo Collection); chýbajúce prepojenie vytvorí. |
clearConnectionPermissions($connectable) | Connection | Vyprázdni sadu oprávnení; ak prepojenie neexistuje, vyhodí ConnectionNotFound. |
syncConnections($connectables) | SyncResult | Zosúladí prepojenia connectora presne s touto množinou. |
permissionsThroughConnection($connectable) | Collection | Uložená sada oprávnení bez ohľadu na stav. |
Kontroly (isConnectedTo(), hasPermissionThroughConnection() a ďalšie) opisujú sekcie Oprávnenia a Dopytovanie prepojení.
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.