Un custom filter ASP.NET MVC per negare l'autorizzazione a un particolare ruolo

di Marco De Sanctis, in ASP.NET MVC,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi