Č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->has($user); // bool
$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í.
Model Member
$member = $team->findMember($user);
$member->role; // 'admin' — the stored role key
$member->role(); // ?Role — resolved (per-team aware); null once expired
$member->member; // the member model (MorphTo)
$member->team; // the Team
$member->meta; // Collection
$member->expires_at; // ?Carbon
$member->isExpired(); // bool
$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.