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 Container Queries nominali
Filtering sulle colonne in una QuickGrid di Blazor
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Gestione degli eventi nei Web component HTML
Utilizzare gRPC su App Service di Azure
Gestire gli accessi con Token su Azure Container Registry
Anonimizzare i dati sensibili nei log di Azure Front Door
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Triggerare una pipeline su un altro repository di Azure DevOps
Usare il colore CSS per migliorare lo stile della pagina
Utilizzare Azure AI Studio per testare i modelli AI
Generare velocemente pagine CRUD in Blazor con QuickGrid