Traity modelov
Členovia sa ukladajú polymorfne, takže členom tímu môže byť akýkoľvek Eloquent model — používateľ, hosťovský účet či API klient. Pridajte trait HasTeams na model, ktorý vystupuje ako člen, a získate pomocníkov pre členstvo, vlastníctvo, roly a oprávnenia:
use Illuminate\Foundation\Auth\User as Authenticatable;
use RoundlyConsulting\Teams\Traits\HasTeams;
class User extends Authenticatable
{
use HasTeams;
}API traitu HasTeams
$user->teams(); // MorphMany<Member> — the model's memberships
$user->ownedTeams(); // MorphMany<Team> — teams this model owns
$user->hasTeam(); // belongs to any team
$user->isActiveMemberOf($team); // a member of $team right now — started, not expired
$user->belongsToTeam($team); // a membership row exists — an expired one included
$user->isMemberOf($team); // alias of belongsToTeam()
$user->ownsTeam($team); // is the owner of $team
$user->teamsWithRole('admin'); // Collection<Member> holding that role
$user->teamRole($team); // ?Role — the resolved role on $team
$user->hasTeamRole($team, 'admin'); // bool
$user->hasTeamPermission($team, 'billing.manage'); // boolteams() vracia členstvá modelu — riadky Member, každý so svojím tímom a rolou — nie modely Team. Ak potrebujete samotné tímy, použite Team::query()->withMember($user).
Na otázku „je teraz členom?“ použite isActiveMemberOf(): ignoruje expirované členstvá a pri zapnutých dátumoch začiatku aj tie, ktoré ešte nezačali. belongsToTeam() a isMemberOf() overujú len to, či existuje riadok členstva — aj expirovaný — a v ďalšej hlavnej verzii majú expirované členstvá ignorovať.
Aktuálny tím cez BelongsToTeam
Pre aplikácie s prepínačom tímov dá BelongsToTeam modelu jeden aktuálny tím cez stĺpec team_id. Pokojne ho kombinujte s HasTeams:
use Illuminate\Foundation\Auth\User as Authenticatable;
use RoundlyConsulting\Teams\Traits\BelongsToTeam;
use RoundlyConsulting\Teams\Traits\HasTeams;
class User extends Authenticatable
{
use BelongsToTeam; // team() + switchTeamTo()
use HasTeams; // memberships, roles, permissions
}
$user->team; // the current Team (BelongsTo)
$user->switchTeamTo($team); // associates + saves, returns $userStĺpec patrí do vašej vlastnej tabuľky, preto k nemu balík migráciu nedodáva — pridajte si nullable team_id sami:
Schema::table('users', function (Blueprint $table): void {
$table->foreignId('team_id')->nullable()->constrained();
});BelongsToTeam ukladá na modeli preferenciu. Tím, v ktorom request alebo job koná — a podľa ktorého filtrujú modely viazané na tím —, je kontext tímu, ktorý nastaví Teams::switchTo() alebo middleware teams.context; pozrite Oddelenie dát tímov. Na modeli so ScopedToTeam je switchTeamTo() strážené ako každý iný zápis.
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.