laravel spatie tutorial

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,

filament shield ruoli

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.

filament shield nuovo ruolo

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.

prefisso permessi
Prefisso permessi

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:

register role policy
register role policy

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

Autore