NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

Č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 TeamMemberAdded

Pridá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 side

Zmena 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 null

Limit 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 kryptomien

Odoslaní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.