laravel spatie: gestione autenticazione e permessi

Laravel Spatie è uno dei pacchetti più potenti in Laravel per gestire ruoli e permessi utente.
Laravel Permission di Spatie rende l’implementazione di RBAC (controllo degli accessi basato sui ruoli) più semplice che mai.
In questo articolo andremo a vedere come installare e configurare correttamente il plugin Shield per utilizzare in modo semplice e veloce la gestione permessi.
Tempo di lettura stimato: 4 minuti
Laravel Permission
Laravel Permission è un potente pacchetto per definire ruoli, assegnare permessi e gestire l’accesso degli utenti nelle tue app Laravel. È dotato di una sintassi facile da usare e di potenti funzionalità.
In Filament è disponibile un plugin che può essere utilizzato per gestire i permessi delle Risorse, delle Pagine e dei Widget nel pannello Filament utilizzando spatie / Laravel-permission.
Requisiti
Per una migliore comprensione dei contenuti di questo articolo, ti consigliamo di leggere prima l’articolo dove spiego i concetti fondamentali di Filament, e l’installazione di Filament. Inoltre ti consiglio di approfondire il progetto presente su repository GitHub e spiegato sempre nell’articolo su Filament.
Filament Shield
Filament Shield creato da Bezhan Salleh, un esperto sviluppatore full-stack. Utilizzando Filament Shield puoi gestire facilmente ruolo e autorizzazione che supportano l’ultima spatie / autorizzazione Laravel.
La prima cosa che dobbiamo fare se vogliamo installare Filament Shield per il nostro progetto è eseguire il seguente comando:
composer require bezhansalleh/filament-shield
Ora dobbiamo aggiungere il Trait HasRoles
nel model User
, quindi la use Spatie\Permission\Traits\HasRoles
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable implements FilamentUser
{
use HasFactory, Notifiable, HasRoles;
In questo modo stiamo legando la gestione ruoli e permessi al modello User
.
Quindi pubblichiamo il file config
e impostiamo la nostra configurazione utilizzando il seguente comando:
php artisan vendor:publish --tag=filament-shield-config
E registriamo il plugin all’interno dell’AdminPanelProvider
per i pannelli Filament desiderati, e lo facciamo utilizzando questa sintassi all’interno del file app\Providers\Filament\AdminPanelProvider.php
,
-> plugin ([
\BezhanSalleh\FilamentShield\FilamentShieldPlugin :: make ()
])
Installazione
Installiamo ora lo Shield di Filament nel nostro progetto, eseguiamo il seguente comando:
php artisan shield:install
Ora abbiamo un nuovo menu Ruoli con la tabella dei ruoli e il ruolo predefinito è Super Admin,

Quando creiamo un ruolo, vedremo il modulo di creazione del ruolo che contiene tutti i modelli e le risorse che abbiamo creato, insieme alle autorizzazioni per tutti i ruoli e alle azioni che possono e non possono eseguire.

All’interno del file config/filament-shield.php
ci sono diversi parametri di configurazione dei Permessi e dei Ruoli.
Laravel Spatie Shield gestisce le autorizzazioni per le risorse Filament, e lo fa in due modi: uno di default e uno custom. Nel modo di default gestisce le autorizzazioni predefinite per le risorse Filament, e i prefissi sono predefiniti all’interno del file config/filament-shield.php
.

Se devi aggiungere una singola autorizzazione (ad esempio il blocco) e averla disponibile per tutte le tue risorse, aggiungila semplicemente alla chiave di configurazione elencata sopra.
Nel caso in cui hai bisogno di un permesso specifico per una sola risorsa, allora devi utilizzare il metodo custom. Se hai questa necessità, puoi approfondire cliccando qui.
Le policy sono definite per ogni risorsa all’interno della directory app/Policies
.
Per fare in modo che i ruoli di Filament Shield funzionino correttamente, è necessario garantire l’accesso a RoleResource
tramite RolePolicy
, e per far questo dovresti abilitare il parametro register_role_policy
, nel tuo AuthServiceProvider
:

Puoi trovare questo esempio con la configurazione completa su repository, per vederlo puoi cliccare su questo link per accedere al repository su GitHub.