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
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Specificare il versioning nel path degli URL in ASP.NET Web API
Load test di ASP.NET Core con k6
Eseguire query verso tipi non mappati in Entity Framework Core
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
Elencare le container images installate in un cluster di Kubernetes
Usare un KeyedService di default in ASP.NET Core 8
Creazione di componenti personalizzati in React.js con Tailwind CSS
Short-circuiting della Pipeline in ASP.NET Core
.NET Conference Italia 2023
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Eseguire operazioni con timeout in React