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

Gate a middleware

Pri zapnutom register_gate_check (predvolene) sa oprávnenia vyhodnocujú cez Gate v Laraveli, takže natívny middleware can: funguje hneď:

Route::get('/users', UsersController::class)->middleware('can:auth.users.view');

$user->can('auth.users.view');           // true when granted directly or via a role
Gate::forUser($user)->allows('auth.users.view');

Ako hook rozhoduje

Balík zaregistruje jediný hook Gate::before. Odpovedá iba vtedy, keď platí všetko nasledujúce — inak vráti null a vaše vlastné gates a policies prebehnú bez zásahu:

  • Kontrola nemá argumenty — žiadny model ani ďalšie parametre.
  • Model používateľa má metódu hasPermissionTo(), teda používa HasRoles.
  • Ability je názov zaregistrovaného oprávnenia.

Ak používateľ oprávnenie drží — priamo alebo cez rolu — hook vráti true. Nikdy nevráti false: používateľ bez oprávnenia prejde na vaše gates, a ak žiadne nie sú, Laravel prístup zamietne, takže middleware can: odpovie kódom 403.

Posledné slovo majú policies

Kontrola oprávnení nikdy neprebije policy modelu. Hneď ako kontrola nesie model alebo akýkoľvek argument — $user->can('update', $post) či middleware can:update,post — hook prenechá rozhodnutie vašej gate alebo policy. Oprávnenie s názvom update autorizuje $user->can('update'), no o $user->can('update', $post) stále rozhoduje PostPolicy::update():

Permissions::permission('update');
Permissions::for($user)->givePermissionTo('update');

$user->can('update');          // true — argument-less, answered by the permission
$user->can('update', $post);   // PostPolicy::update() decides — ownership, tenancy, …
final class PostPolicy
{
    public function update(User $user, Post $post): bool
    {
        return $post->owner_id === $user->getKey();
    }
}

Hrubozrnné oprávnenia a policies viazané na model tak fungujú vedľa seba a ani jedno potichu nepohltí druhé.

Vypnutie hooku

Nastavte register_gate_check na false, ak chcete hook úplne vynechať a oprávnenia vyhodnocovať sami:

// config/permissions.php
'register_gate_check' => false,

// then check explicitly where you need it
abort_unless($request->user()->hasPermissionTo('auth.users.view'), 403);

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.