Una lacuna del filtro AuthorizeAttribute standard di ASP.NET MVC è che non permette di negare l'autorizzazione a particolari ruoli o utenti. Si tratta di un'esigenza tipicamente più rara del classico "autorizza l'utente X"; alle volte, però, accade che per la particolare natura dell'applicazione e delle caratteristiche del ruolo, è più immediato ragionare nei termini di ciò che l'utente non possa fare.
Per implementare questa funzionalità, è sufficiente realizzare un filtro custom che erediti da AuthorizeAttribute:
public class DenyAttribute : AuthorizeAttribute { protected override bool AuthorizeCore(HttpContextBase httpContext) { if (!httpContext.User.Identity.IsAuthenticated) return false; return !base.AuthorizeCore(httpContext); } }
La classe in alto effettua l'override del metodo AuthorizeCore e nega l'autorizzazione all'utente anonimo restituendo false se l'IIdentity corrente risulta non autenticato. Se questo controllo invece ha successo, viene applicata la logica standard di AuthorizeAttribute, opportunamente negata, con il risultato di vietare l'accesso agli utenti e ai ruoli specificati.
Per utilizzarla è sufficiente decorare le azioni o i controller desiderati:
[Deny(Roles="Users")] public ActionResult MyAction() { .. }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Escludere alcuni file da GitHub Secret Scanning
Filtering sulle colonne in una QuickGrid di Blazor
Selettore CSS :has() e i suoi casi d'uso avanzati
Managed deployment strategy in Azure DevOps
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Utilizzare WhenEach per processare i risultati di una lista di task
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Creare una custom property in GitHub
Gestire gli accessi con Token su Azure Container Registry
I più letti di oggi
- Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
- Gestione degli eventi nei Web component HTML
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9
- Creare agenti facilmente con Azure AI Agent Service
- C# 8
- Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API