Come sappiamo, in ASP.NET MVC possiamo impostare l'attributo Authorize sia a livello di singola action che a livello di controller. In quest'ultimo caso, l'effetto è quello di applicare le regole di autenticazione a tutte le action in esso contenute.
Può capitare che, pur avendo impostato una regola generale a livello di controller, vogliamo comunque modificare questa policy su una singola action. Immaginiamo, per esempio, di avere un controller così strutturato, riservato agli utenti Admin, ma con la action Contact accessibile anche dal semplice ruolo User.
[Authorize(Roles = "Admin")] public class HomeController : Controller { public ActionResult Index() { return View(); } [Authorize(Roles = "User")] public ActionResult Contact() { return View(); } }
Se provassimo ad accedere alla action Contact ci renderemmo conto che, così com'è, questo codice non funziona: il motivo è che ASP.NET MVC valuta entrambi gli AuthorizationFilter (quello per Admin e quello per User), rigettando la richiesta nel caso in cui un utente non abbia entrambi i ruoli.
Da ASP.NET MVC 5 abbiamo a disposizione uno strumento chiamato Filter Override, tramite qui possiamo invalidare le regole specificate dai filtri posizionati più in alto nella gerarchia (per esempio a livello di controller o globali) e impostare regole specifiche. Nel nostro caso, è sufficiente aggiungere l'attributo OverrideAuthorization:
[OverrideAuthorization] [Authorize(Roles = "User")] public ActionResult Contact() { return View(); }
Esistono filter override di diversi tipi, a seconda della tipologia di filtro che si vuole sovrascrivere:
- OverrideActionFilters
- OverrideAuthentication
- OverrideAuthorization
- OverridExceptionFilters
- OverrideResultFilters
Eventualmente, possiamo crearne di personalizzati semplicemente implementando l'interfaccia IOverrideFilter.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Short-circuiting della Pipeline in ASP.NET Core
Utilizzare Azure AI Studio per testare i modelli AI
Gestire domini wildcard in Azure Container Apps
Implementare il throttling in ASP.NET Core
Migrare una service connection a workload identity federation in Azure DevOps
Utilizzare gli snapshot con Azure File shares
Usare il versioning con i controller di ASP.NET Core Web API
Load test di ASP.NET Core con k6
Gestire la cancellazione di una richiesta in streaming da Blazor
Utilizzare QuickGrid di Blazor con Entity Framework
I più letti di oggi
- Utilizzare Docker Compose con Azure App Service
- Utilizzare QuickGrid di Blazor con Entity Framework
- Modernizzare le applicazioni WPF e Windows Forms con Blazor
- ASP 3 per esempi
- annunciato #netstandard 2.1. .NET Core lo supporterà a partire da #netcore3, così come le prossime versione di #xamarin, #mono e #unity.il supporto per #netfx 4.8, invece, non ci sarà. https://aspit.co/bq2
- Steel Style CheckBox per Silverlight 4.0