Členovia
Členov pridávate, odoberáte a overujete cez handle tímu — alebo skratkou na modeli Team, ktorá spustí to isté volanie managera. Roly sú obyčajné reťazcové kľúče:
use RoundlyConsulting\Teams\Facades\Teams;
$members = Teams::for($team)->members();
$member = $members->add($user, 'member'); // Member
$member = $members->add($user, 'editor', meta: ['source' => 'import']);
$removed = $members->remove($user); // bool — soft-deletes; false when not a member
$members->find($user); // ?Member
$members->hasActive($user); // bool — a member right now: started, not expired
$members->all(); // Collection<Member> — expired memberships included
$team->memberHasRole($user, 'editor'); // bool
$team->memberHasPermission($user, 'posts.edit'); // bool
// Model shorthand — the same manager call:
$team->addMember($user, 'member');
$team->removeMember($user);Idempotentné pridávanie
Tím má pre každého člena jediný riadok členstva — zaručuje to unikátny index, ktorý pokrýva aj mäkko zmazané riadky. Pridanie je idempotentné: opätovné pridanie aktívneho člena vráti jeho členstvo a rolu zmení, len ak sa líši — žiadne duplicitné riadky, žiadne obranné kontroly vo vašom kóde. expiresAt sa prepíše, len ak ho zadáte, a pôvodná prijatá pozvánka členstva sa nikdy neprepíše.
Opätovné pridanie člena, ktorý bol odobratý alebo ktorému členstvo vypršalo, obnoví ten istý riadok ako nové členstvo — rola, meta aj expirácia sa vezmú z nového volania (bez expiresAt je trvalé) — a spustí TeamMemberAdded. Obsadí miesto, takže platí MaxSeats:
$members = Teams::for($team)->members();
$members->add($user, 'member'); // creates the membership — fires TeamMemberAdded
$members->add($user, 'member'); // no-op — returns the same Member
$members->add($user, 'admin'); // updates the role — fires TeamMemberRoleChanged
$members->remove($user); // soft-deletes the row
$members->add($user, 'member'); // revives that row as a fresh membership — fires TeamMemberAddedPridávanie beží v transakcii, ktorá zamkne riadok tímu, takže súbežné pridania — dvojité odoslanie formulára, dvaja ľudia prijímajúci posledné miesto — idú za sebou: jeden riadok na člena a limit miest platí.
Zmena roly a odobratie
Teams::for($team)->members()->changeRole($bob, 'admin'); // Member — throws MemberNotFoundException for a non-member
Teams::for($team)->members()->remove($bob); // bool — soft-deletes the membership
$team->findMember($bob)?->removeFromTeam(); // bool — the same, from the Member sideZmena roly spustí TeamMemberRoleChanged (s pôvodnou rolou) len vtedy, keď sa rola naozaj zmení; zmena roly modelu, ktorý nie je členom, vyhodí MemberNotFoundException. Odobratie spustí TeamMemberDeleted a je to soft delete — riadok zostáva kvôli auditu a opätovné pridanie člena ho obnoví.
Je niekto práve teraz členom?
Odobraté členstvo je mäkko zmazané, no expirované si riadok kvôli auditu ponechá až do odstránenia — členstvo preto overujte aktívnymi variantmi, ktoré ignorujú expirované členstvá a pri zapnutých dátumoch začiatku aj tie, ktoré ešte nezačali:
$team->hasActiveMember($user); // a member right now — started, not expired
Teams::for($team)->members()->hasActive($user); // the same, through the facade
$user->isActiveMemberOf($team); // the same, from the member side
$team->isAccessibleBy($user); // may act in the team — counts a team above with inherit_roles_down
$team->hasMember($user); // deprecated — a row exists, an expired one includedTeam::hasMember() a members()->has() sú zastarané: overujú len existenciu riadku, takže sa počíta aj expirované členstvo. V ďalšej hlavnej verzii budú expirované členstvá ignorovať aj ony — a tiež belongsToTeam() a isMemberOf().
Model Member
$member = $team->findMember($user);
$member->role; // 'admin' — the stored role key
$member->role(); // ?Role — resolved (per-team aware); null once expired or before it starts
$member->member; // the member model (MorphTo)
$member->team; // the Team
$member->meta; // Collection
$member->starts_at; // ?Carbon — read with teams.members.start_dates
$member->expires_at; // ?Carbon
$member->isExpired(); // bool
$member->hasStarted(); // bool — always true while start dates are off
$member->isActive(); // bool — started and not expired
$member->acceptedInvite; // the Invite this member joined through, or nullLimit miest
Ak má tím nastavenie MaxSeats, pridanie nového člena — aj obnovenie odobratého či expirovaného — vyhodí TeamsException, keď počet aktívnych členov dosiahne limit. Opätovné pridanie aktívneho člena limit nikdy nespustí — pozrite Nastavenia tímu.
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.