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

Vnorené tímy

Pre hierarchie ako firma → oddelenie → tím. Vnáranie je predvolene vypnuté — nastavte TEAMS_NESTING=true po spustení migrácie parent_id (pozrite Inštalácia); kým je vypnuté, stĺpec nič nečíta. Členstvo zostáva viazané na konkrétny tím:

use RoundlyConsulting\Teams\Facades\Teams;

// .env → TEAMS_NESTING=true (after the parent_id migration ran)
Teams::for($department)->moveUnder($company);   // Team — place under a parent
Teams::for($department)->moveToRoot();          // Team — detach

$department->parent;         // ?Team
$company->children;          // Collection<Team>
$team->ancestors();          // nearest first; stops at a soft-deleted ancestor
$company->descendants();     // level by level
$team->root();               // the topmost ancestor, or the team itself
$team->depth();              // 0 for a root team

moveUnder() a moveToRoot() spustia MoveTeamAction, ktorá na čas transakcie zamkne oba riadky, uloží zmenu a spustí TeamMoved s tímom, novým rodičom a kľúčom predchádzajúceho rodiča; Teams::fake() ju zaznamená. Každá zmena rodiča sa overí pri uložení — cez akciu aj cez priame $team->update(['parent_id' => …]) — a vyhodí TeamHierarchyException, ak je vnáranie vypnuté, ak je nový rodič samotný tím alebo jeho potomok (aj mäkko zmazaný), alebo ak by sa niektorý tím presúvaného podstromu dostal hlbšie ako nesting.max_depth (predvolene 4, 1 – 100; koreň má hĺbku 0). Odpojenie je povolené vždy.

Tím, ktorý má ešte podriadené tímy, natrvalo zmazať nejde — najprv ich presuňte alebo zmažte. Mäkké zmazanie rodiča väzbu ponechá, no zastaví ancestors() aj dedenie rolí, pretože zmazaný tím neudeľuje nič. Každé prechádzanie je ohraničené max_depth a pamätá si navštívené riadky, takže ani dáta, ktoré surový dopyt zacyklil, ho nezaseknú.

Roly sa dedia smerom nadol

S TEAMS_INHERIT_ROLES_DOWN=true — účinné len pri zapnutom vnáraní — platí rola v tíme aj vo všetkých tímoch pod ním, nikdy nad ním:

  • Dedí sa — memberHasPermission() a hasTeamPermission(), vyhodnotené voči sade rolí tímu, v ktorom je rola držaná; memberHasRole(), hasTeamRole() a @teamRole; ability teams.<oprávnenie> v Gate, @teamPermission a tímové policies; isAccessibleBy(), a teda middleware teams.context, switchTo(), setCurrentMany() a opätovné overenie pri jobe vo fronte; pri moste k permissions aj priradenia v nadradenom tíme.
  • Nededí sa — hasActiveMember(), hasMember(), findMember(), isActiveMemberOf(), teamRole(), belongsToTeam() a isMemberOf(): členstvo zostáva viazané na tím. Aj vlastníctvo — isOwnedBy(), teams.owner, @teamOwner a before() v policy — patrí konkrétnemu tímu, hoci oprávnenia roly owner vlastníka nadradeného tímu sa dedia.
  • Expirované členstvá a tie, ktoré ešte nezačali, sa nepočítajú na žiadnej úrovni.

Dáta viazané na tím zvyčajne ukazujú na koreňový tím:

// Team-scoped data usually points at the root team:
Teams::switchTo($team->root());

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.