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
Ordine e importanza per @layer in CSS
Assegnare un valore di default a un parametro di una lambda in C#
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Aggiungere interattività lato server in Blazor 8
Estrarre dati randomici da una lista di oggetti in C#
Gestire liste di tipi semplici con Entity Framework Core
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Miglioramenti nelle performance di Angular 16
Recuperare l'ultima versione di una release di GitHub