Una delle innovazioni più interessanti in ASP.NET Core è il concetto di Policy per quanto riguarda la gestione delle autorizzazioni.
Nelle versioni precedenti, quando dovevamo controllare l'accesso a particolari controller o action, l'unico strumento che avevamo a disposizione per differenziare gli utenti era il Role: una certa pagina o una certa API poteva essere ristretta solo agli appartenenti a un determinato gruppo.
Questo approccio aveva fondamentalmente due problemi:
- il Role era l'unico discriminante built-in che potevamo utilizzare. Regole più complesse potevano solo essere soddisfatte tramite custom authorization attribute;
- se il nome del ruolo veniva modificato, era necessario andare a sostituirlo in tutte le pagine o aree in cui era stato utilizzato.
Con l'avvento della security basata su Claim, invece, abbiamo a disposizione tutta una serie di attributi in più (i claim, per l'appunto) che descrivono l'utente in maniera più dettagliata, e permettono quindi di gestire regole più complesse, come per esempio richiedere multi-factor authentication per accedere all'area admin del sito.
Una policy non è altro che una sequenza di regole che viene dichiarata all'interno della classe startup:
public void ConfigureServices(IServiceCollection services) { // .. altro codice qui .. services.AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddAuthorization(options => { options.AddPolicy("AdminOnly", policy => { policy.RequireRole("Admin"); }); }); }
Nell'esempio in alto, abbiamo creato una semplice policy chiamata AdminOnly che richiede che l'utente appartenga al ruolo Admin.
In un controller o in una action, possiamo poi referenziare la policy in alto tramite il solito attributo Authorize:
[Authorize(Policy = "AdminOnly")] public IActionResult About() { // .. altro codice qui .. }
Le policy possono richiedere la presenza di determinati claim, possono implementare regole autorizzative complesse e persino essere combinate tra loro.
In ogni modo, anche usarle solo per specificare un semplice requisito di ruolo ci permette di astrarre la regola autorizzativa dal requisito in possesso dell'utente: se il nome del gruppo dovesse cambiare, o la regola dovesse diventare più complessa, ci basterà modificare la policy senza dover toccare i singoli controller o action dove è applicata.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestione dell'annidamento delle regole dei layer in CSS
Path addizionali per gli asset in ASP.NET Core MVC
Gestire la cancellazione di una richiesta in streaming da Blazor
Generare velocemente pagine CRUD in Blazor con QuickGrid
Effettuare il refresh dei dati di una QuickGrid di Blazor
Creare una custom property in GitHub
Applicare un filtro per recuperare alcune issue di GitHub
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
I più letti di oggi
- .NET Conference Italia 2024 - Milano
- Develop and distribute Azure Functions using K8s and CI/CD
- Disponibile la versione finale di Hyper-V: la virtualizzazione per Windows Server 2008
- Speciale Mastering Entity Framework
- Velocity arriva alla CTP3
- Silverlight Summer: un'estate speciale piena di Style per i controlli Silverlight!
- Disponibile la versione beta di Silverlight 4.0
- Mono 0.13: ora anche web services
- .NET Alerts Software Development Kit