Skip to main content

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:

  1. Analisi dei Controller: Scansiona i controller alla ricerca dell'attributo #[AutoPermissions]
  2. Generazione dei Permessi: Crea permessi seguendo convenzioni di naming basate su modulo, risorsa e azione
  3. Verificazione tramite Policy: Le Policy estendono BasePolicy che 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 Shared
  • cont.contracts.create - Creare un contratto nel modulo Contratti
  • bt.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 sistema
  • BasePolicy - Policy base con verifica automatica permessi

Comandi Artisan

  • auto-permissions:generate - Genera i permessi per i controller
  • auto-permissions:update-titles - Aggiorna i titoli dei permessi esistenti

Quick Start

Per iniziare ad utilizzare il sistema AutoPermissions:

  1. 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
}
  1. Genera i permessi:
php artisan auto-permissions:generate --all
  1. 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;
}
}
  1. I permessi vengono verificati automaticamente tramite BasePolicy::before() prima della logica custom della Policy.

Prossimi Passi