AutoPermissions con Policy-based Authorization
Il sistema AutoPermissions è una funzionalità del modulo Shared che automatizza la generazione e gestione dei permessi nell'applicazione Laravel, integrandosi con il sistema di Laravel Policies per la verifica delle autorizzazioni. Questo sistema elimina la necessità di definire manualmente i permessi per ogni action dei controller, utilizzando invece attributi PHP e convenzioni di naming intelligenti.
Panoramica del Sistema
Caratteristiche Principali
- Generazione Automatica: I permessi vengono generati automaticamente basandosi sui controller e sui metodi (azioni)
- Attributi PHP: Utilizza attributi moderni PHP 8+ per configurare il comportamento
- Caching: Sistema di cache ottimizzato
- Configurazione Flessibile: Supporta personalizzazioni avanzate tramite attributi
- Policy-based Authorization: Integrazione nativa con Laravel Policies per verifica permessi con logica custom
Come Funziona
Il sistema AutoPermissions opera integrando generazione automatica dei permessi con Laravel Policies:
- Analisi dei Controller: Scansiona i controller alla ricerca dell'attributo
#[AutoPermissions] - Generazione dei Permessi: Crea permessi seguendo convenzioni di naming basate su modulo, risorsa e azione
- Verificazione tramite Policy: Le Policy estendono
BasePolicyche verifica automaticamente i permessi prima di eseguire la logica custom
Convenzioni di Naming
I permessi generati seguono il pattern:
{modulo}.{risorsa}.{azione}
Esempi:
shared.users.index- Visualizzare la lista utenti nel modulo Sharedcont.contracts.create- Creare un contratto nel modulo Contrattibt.budgets.update- Modificare un budget nel modulo Budgeting Tool
Architettura del Sistema
Componenti del Sistema
Attributi di Configurazione
#[AutoPermissions]- Attiva il sistema su un controller#[PermissionNaming]- Personalizza il naming della risorsa#[CustomPermission]- Override del nome azione per metodi specifici#[ExcludeFromPermissions]- Esclude metodi dalla generazione
Servizi Core
AutoPermissionsService- Logica principale del sistemaBasePolicy- Policy base con verifica automatica permessi
Comandi Artisan
auto-permissions:generate- Genera i permessi per i controllerauto-permissions:update-titles- Aggiorna i titoli dei permessi esistenti
Quick Start
Per iniziare ad utilizzare il sistema AutoPermissions:
- Aggiungi l'attributo al controller:
#[AutoPermissions]
class UserController extends Controller
{
public function index()
{
$this->authorize('viewAny', User::class);
// Logica del metodo
} // Genera: shared.users.index
public function update(Request $request, User $user)
{
$this->authorize('update', $user);
// Logica del metodo
} // Genera: shared.users.update
}
- Genera i permessi:
php artisan auto-permissions:generate --all
- Crea la Policy che estende
BasePolicy:
class UserPolicy extends BasePolicy
{
public function update(User $user, User $model): bool
{
// BasePolicy ha già verificato 'shared.users.update'
// Aggiungi logica custom
return $user->id === $model->id;
}
}
- I permessi vengono verificati automaticamente tramite
BasePolicy::before()prima della logica custom della Policy.
Prossimi Passi
- 📋 Comandi del Sistema - Guida completa ai comandi Artisan
- ⚙️ Attributi di Configurazione - Dettagli su tutti gli attributi disponibili
- 🔧 PermissionService Helper - Gestione manuale dei permessi
- 🛡️ Policy-based Authorization - Integrazione con Laravel Policies