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

Gate, Blade a policies

Pri zapnutom gate.register (predvolene) autorizujete tak, ako je v Laraveli zvykom. Ability má tvar <prefix>.<oprávnenie> a tím je argument pre Gate:

if ($user->can('teams.manage-billing', $team)) {
    // ...
}

$user->can('teams.posts.publish', $team);     // a permission ability
$user->can('teams.owner', $team);              // the owner ability
Gate::authorize('teams.team.update', $team);   // throws a 403 when denied

Ako Gate rozhoduje

  • Balík registruje hook Gate::before, nie pomenované ability. Odpovedá len na ability s prefixom (predvolene teams.), ktorých prvým argumentom je Team.
  • teams.owner sa vyhodnotí ako $team->isOwnedBy($user); každé iné teams.<oprávnenie> ako memberHasPermission().
  • Pri nezhode vráti null, nie false, takže rozhodnú vaše vlastné gates a policies — hook nikdy neblokuje nesúvisiace ability.
  • Názvy zmeníte cez gate.prefix a gate.owner_ability; s TEAMS_REGISTER_GATE=false sa nezaregistruje hook ani Blade direktívy.

Blade direktívy

@teamPermission($team, 'manage-billing')
    <a href="/billing">Billing</a>
@endteamPermission

@teamRole($team, 'admin')
    <button>Manage team</button>
@endteamRole

@teamOwner($team)
    <button>Delete team</button>
@endteamOwner

{{-- Check a specific member instead of the signed-in user --}}
@teamPermission($team, 'posts.publish', $otherUser)
    <span>Can publish</span>
@endteamPermission

Každá direktíva predvolene overuje prihláseného používateľa; ak chcete overiť niekoho iného, odovzdajte člena ako posledný argument. Pri expirovanom členstve zlyhá @teamRole aj @teamPermission.

Tímové policies

teams:policy vygeneruje policy rozširujúcu AbstractTeamPolicy, ktorej before() povolí vlastníkovi tímu všetko nad jeho tímom a inak rozhodnú vaše metódy. Ability na úrovni triedy — $user->can('create', Team::class), viewAny — žiadny tím nenesú, takže ich before() pustí ďalej do vašej metódy:

php artisan teams:policy TeamPolicy           # writes app/Policies/TeamPolicy.php
php artisan teams:policy TeamPolicy --force   # overwrite an existing file
namespace App\Policies;

use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Teams\Models\Team;
use RoundlyConsulting\Teams\Policies\AbstractTeamPolicy;

class TeamPolicy extends AbstractTeamPolicy
{
    public function view(Model $user, Team $team): bool
    {
        return $this->allows($user, $team, 'team.view');
    }

    public function update(Model $user, Team $team): bool
    {
        return $this->allows($user, $team, 'team.update');
    }

    public function delete(Model $user, Team $team): bool
    {
        return $this->allows($user, $team, 'team.delete');
    }
}

Zaregistrujte ju ako obvykle (automatické objavovanie policies alebo Gate::policy()). Ručne písaným policies dá tie isté pomocné metódy owns() a allows() trait HasTeamPolicies:

use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Teams\Concerns\HasTeamPolicies;
use RoundlyConsulting\Teams\Models\Team;

class PostPolicy
{
    use HasTeamPolicies;

    public function update(Model $user, Team $team): bool
    {
        return $this->owns($user, $team) || $this->allows($user, $team, 'posts.update');
    }
}

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.