notiziephp.it

Grant: ruoli e permessi basati su enum per Laravel

Traduzione da Laravel News
5 Ottobre 2026 Tempo di lettura: 3 minuti
Grant: ruoli e permessi basati su enum per Laravel

Grant è un package di ruoli e permessi per Laravel creato da Pushpak Chhajed. Definisci ruoli e permessi in enum PHP, mentre il database memorizza le assegnazioni di ruolo di ciascun utente. I controlli passano attraverso il Gate di Laravel, quindi le chiamate esistenti a can(), Gate::authorize() e alla direttiva Blade @can funzionano con Grant.

Definire l'accesso negli enum

Un enum dei permessi implementa il contract Ability di Grant, con ogni backing value registrato come ability nel Gate di Laravel. Un enum dei ruoli implementa il contract Role ed elenca i permessi che concede:

use Shipfastlabs\Grant\Ability;
use Shipfastlabs\Grant\Role as RoleContract;

enum Permission: string implements Ability
{
case EditPosts = 'edit-posts';
case ViewReports = 'view-reports';

public function deniedMessage(): string
{
return 'You are not allowed to do that.';
}
}

enum Role: string implements RoleContract
{
case Editor = 'editor';
case Viewer = 'viewer';

public function permissions(): array
{
return match ($this) {
self::Editor => [Permission::EditPosts],
self::Viewer => [Permission::ViewReports],
};
}
}

Grant usa i ruoli per l'assegnazione e i permessi per i controlli. Non ha middleware di ruolo né una direttiva @role; le route usano le funzionalità di autorizzazione di Laravel per verificare un permesso. Se vuoi maggiori informazioni sulla definizione delle ability nel codice, leggi il nostro articolo su l'autorizzazione con backed enum.

Assegnare ruoli globali o con scope

Dopo aver aggiunto il trait HasRoles di Grant al modello User, puoi gestire le assegnazioni con grant(), revoke() e syncRoles(). Passando un modello Eloquent come on si limita un ruolo a quel team, progetto o altro modello:

$user->grant(Role::Editor);
$user->grant(Role::Viewer, on: $team);

$user->can(Permission::EditPosts);
$user->can(Permission::ViewReports, $team);

Un controllo dei permessi con scope include sia i ruoli globali dell'utente sia i ruoli assegnati su quel modello. Per un altro approccio ai permessi con scope, vedi Larallow.

Combinare permessi e policy

Le policy possono comunque gestire le regole sul modello, come la proprietà. L'attributo Requires di Grant verifica il permesso prima che venga eseguito il metodo della policy, lasciando al metodo il compito di verificare il post stesso:

use Shipfastlabs\Grant\Requires;

#[Requires(Permission::EditPosts)]
public function update(User $user, Post $post): bool
{
return $post->author_id === $user->id;
}

Grant inoltra gli argomenti del Gate a questo controllo, incluso un modello usato per i ruoli con scope. Puoi anche configurare un ruolo come super admin; solo un ruolo super admin assegnato a livello globale bypassa i controlli del Gate.

Installare e mantenere i ruoli

Grant richiede PHP 8.3 o successivo e Laravel 12 o 13. Il comando di installazione pubblica la sua configurazione e la migration, e crea gli enum iniziali di ruoli e permessi se non esistono:

composer require shipfastlabs/grant
php artisan grant:install
php artisan migrate

Dopo l'installazione, aggiungi Shipfastlabs\Grant\HasRoles al modello User. Modificare il backing value di un ruolo o eliminare un case lascia orfane le vecchie assegnazioni, il che significa che quegli utenti perdono il ruolo finché non rimappi le righe. Esegui php artisan grant:sync per rimapparle o eliminarle; grant:list e grant:show aiutano a ispezionare i permessi registrati e i ruoli di un utente.

Consulta il repository di Grant per la configurazione, gli helper di testing e gli esempi di ruoli con scope.

Condividi su: LinkedIn

Altri articoli recenti