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

Modely a schéma

Šesť tabuliek, šesť modelov. Všetky podporujú soft delete a Team, Member, Invite a JoinRequest pretypujú meta na Collection; mass assignment je otvorený, pretože zapisovať sa má cez fasádu a jej akcie:

TabuľkaModelHlavné stĺpce
teamsTeamname, is_public, owner morph (nullable), meta json
team_membersMemberteam_id, member morph, role, accepted_invite_id (pri zmazaní pozvánky null), meta, expires_at (index) — unikátne (team_id, member morph), vrátane mäkko zmazaných riadkov
team_invitesInviteteam_id, code (unikátny), role, email (index), invited_by morph, meta, uses, max_uses, expires_at
team_join_requestsJoinRequestteam_id, requester morph, requested_role, status (index), message, meta, responded_by morph, responded_at, expires_at
team_rolesRoleDefinitionkey (unikátny), name, permissions json, description — databázový driver rolí
team_role_overridesTeamRoleteam_id, key, name, permissions json, description — unikátne (team_id, key)

Riadky tabuliek odkazujúcich na teams sa kaskádovo zmažú, keď sa tím zmaže natrvalo (force delete). Morph stĺpce sa riadia podľa key_type — pozrite Konfigurácia.

Nahradenie modelu

Nasmerujte kľúč teams.models.* na vlastnú podtriedu — každá relácia aj akcia načíta triedu z konfigurácie. Trieda musí byť model z balíka alebo jeho podtrieda; čokoľvek iné vyhodí InvalidConfigurationException s názvom kľúča — nikdy sa potichu nenahradí modelom z balíka:

namespace App\Models;

use Illuminate\Database\Eloquent\Relations\HasMany;
use RoundlyConsulting\Teams\Models\Team as BaseTeam;

class Team extends BaseTeam
{
    public function projects(): HasMany
    {
        return $this->hasMany(Project::class);
    }
}
// config/teams.php
'models' => [
    'team' => App\Models\Team::class,
    'member' => RoundlyConsulting\Teams\Models\Member::class,
    'invite' => RoundlyConsulting\Teams\Models\Invite::class,
    'team_role' => RoundlyConsulting\Teams\Models\TeamRole::class,
    'join_request' => RoundlyConsulting\Teams\Models\JoinRequest::class,
],

Vlastný role provider

Ak chcete roly načítavať odinakiaľ — napríklad z externej služby — zaregistrujte kontrakt RoleProvider nanovo po registrácii balíka, napríklad v metóde register() vášho AppServiceProvidera. Balík ho registruje ako scoped; urobte to isté, aby sa provider, ktorý si drží mapu rolí, vytvoril nanovo pre každý request a job vo fronte:

// app/Providers/AppServiceProvider.php → register()
use RoundlyConsulting\Teams\Roles\Contracts\RoleProvider;

// Scoped, like the package's own binding: a fresh provider per request or queued job.
$this->app->scoped(RoleProvider::class, fn () => new \App\Teams\MyRoleProvider());
namespace RoundlyConsulting\Teams\Roles\Contracts;

interface RoleProvider
{
    /**
     * Define a role — an upsert on $key: registering a key again replaces its
     * name, permissions and description, whichever provider backs it.
     *
     * @param  list<string|Permission>  $permissions
     */
    public function register(string $key, string $name, array $permissions = [], string $description = ''): Role;

    public function find(string $key): ?Role;

    /** @return array<string, Role> */
    public function all(): array;
}

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.