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
Creare una custom property in GitHub
Creare un'applicazione React e configurare Tailwind CSS
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Referenziare un @layer più alto in CSS
Estrarre dati randomici da una lista di oggetti in C#
Testare l'invio dei messaggi con Event Hubs Data Explorer
Utilizzare Tailwind CSS all'interno di React: primi componenti
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Ottenere un token di accesso per una GitHub App
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Generare la software bill of material (SBOM) in GitHub
I più letti di oggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Eseguire script pre e post esecuzione di un workflow di GitHub
- Creare una libreria CSS universale: Cards
- Migliorare l'organizzazione delle risorse con Azure Policy