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.
Altri articoli recenti
Laravel AI 1.1 e 1.2: Agent Skills, Cohere e structured output più solidi
Le release 1.1.0 e 1.2.0 di laravel/ai portano gli Agent Skills, l'approvazione obbligatoria per i tool built-in e nuovi provider come Cohere e Laya self-hosted. Sul fronte qualità arrivano i fix allo structured output per Bedrock e il supporto alle provider options. Aggiornati anche i modelli di default, con Claude 4.7+ che ignora i sampling params.
Laravel 13.35.0: scheduler più controllabile, code più flessibili e response Markdown
Laravel 13.35.0 porta Schedule::alwaysOnOneServer(), il supporto a schedule:interrupt per i comandi di lunga durata, --memory in percentuale per queue:work e il nuovo metodo markdown() sulla response factory. Tante piccole migliorie anche a test, view compilate in parallelo e dischi local.
BashBox: un interprete Bash in sandbox per agenti AI in PHP
BashBox è un interprete bash scritto in puro PHP che permette di eseguire gli script generati dagli agenti AI senza mai ricorrere a proc_open, exec o shell_exec. Ogni comando è una classe PHP che lavora su un filesystem virtuale, con limiti di esecuzione, quote disco e accesso di rete configurabili. Ideale per chi sviluppa agenti con il Laravel AI SDK o altre librerie simili.