Nello script precedente, abbiamo visto come l'action filter Authorize sia utile per applicare in maniera automatica delle restrizioni alle azioni che un utente può eseguire e, nel caso questi non risulti abilitato, rimandarlo alla pagina di autenticazione.
Nel caso in cui però l'utente risulti già autenticato, questo comportamento di default corre il rischio di essere percepito più come un malfunzionamento della login del sito che non come conseguenza della mancanza delle autorizzazioni necessarie. Fortunatamente ASP.NET MVC è assolutamente personalizzabile anche in questo aspetto, e per farlo è sufficiente creare una nuova classe che erediti da AuthorizeAttribute ed effettuare l'override del metodo OnAuthorization:
public class CustomAuthorizeAttribute : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { if (!this.AuthorizeCore(filterContext.HttpContext)) { // se l'utente è autenticato, rimandiamo alla view // in cui si indica che non ha abbastanza privilegi if (filterContext.HttpContext.User.Identity.IsAuthenticated) { filterContext.Result = new RedirectResult("~/Unauthorized"); } else { filterContext.Result = new HttpUnauthorizedResult(); } } } }
In questo nostro filtro custom, ad esempio, dapprima invochiamo il metodo AuthorizeCore per verificare se l'utente ha sufficienti permessi per eseguire l'azione. Nel caso in cui la verifica fallisca, se questi risulta comunque autenticato, viene effettuato un redirect verso una pagina di cortesia, in cui magari possono essere spiegate le ragioni del divieto; solo in presenza di utente anonimo, invece, verrà seguito il comportamento standard, rimandando alla pagina di login.
A questo punto non ci resta che sostituirlo al filtro Authorize di default, in corrispondenza delle action e dei controller desiderati:
[CustomAuthorize(Users = "Crad")] public ActionResult ReservedAction() { // ... logica qui ... }
Quello presentato è solo una semplice dimostrazione di come si possa personalizzare ASP.NET MVC in fase di authorization ma nulla vieta, ad esempio, di effettuare l'override di AuthorizeCore per intervenire direttamente nella logica di validazione dei permessi per realizzare comportamenti più complessi.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Escludere alcuni file da GitHub Secret Scanning
Path addizionali per gli asset in ASP.NET Core MVC
Migrare una service connection a workload identity federation in Azure DevOps
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
I più letti di oggi
- Utilizzare una qualunque lista per i parametri di tipo params in C#
- Includere un button in un component ed esporne l'evento click in Angular
- #SQLServer #Modeling (codename Oslo) CTP di nov 2009 aggiornato per VS 2010 RC: http://u.aspitalia.com/fi
- .NET Conference Italia 2019 Live - Milano
- Accedere a file XML remoti con ASP.NET
- Creare una libreria CSS universale: Nav menu
- Utilizzare funzioni di istanza con le Azure Function
- A quick tour around Azure Dev Spaces