Modificare i ruoli di Roles API utilizzando un HttpModule

di Daniele Bochicchio, in ASP.NET 2.0, Roles API, HttpModule,

In alcuni scenari è necessario modificare a runtime i ruoli associati al Principal corrente, così da fare in modo che le informazioni dell'utente siano differenti.
ASP.NET 2.0 mette a disposizione le Roles API, attraverso le quali è possibile fare in modo che venga utilizzato il Provider Model, che consente di modificarne le impostazioni attraverso il web.config, senza toccare il codice.

Una delle necessità diffuse in alcuni scenari è quello appunto di fare in modo che un utente abbia, su una sola pagina o su un gruppo di essi, un insieme di ruoli che non siano quelli caricati dal modulo, ma possano essere specificati da altre fonti.
In questo caso è necessario intercettare l'evento GetRoles della classe RoleManagerModule, in modo tale che quando Roles API va a recuperare i ruoli, possano essere sovrascritti con il caricamento locale:

using System;
using System.Web;
using System.Web.Security;

namespace ASPItalia.com.Modules
{
  public class CustomRoleModule : IHttpModule
  {
    // inizializzo il module e registro gli ecenti
    public void Init(HttpApplication application)
    {
      RoleManagerModule roleModule = (RoleManagerModule)context.Modules["RoleManager"];

      if (roleModule != null)
        roleModule.GetRoles += RoleManagerEventHandler(GetRoles);
    }

    private void GetRoles(object sender, RoleManagerEventArgs e)
    {
      HttpContext ctx = HttpContext.Current;
  
      // controllo pagina - aggiungere eventualmente un filtro su ruoli/username
      if (ctx.Request.Path.ToLower().IndexOf("specialpage.aspx")>-1)
      {
        // sovrascivo il principal corrente con i ruoli custom
        ctx.User = new GenericPrincipal(ctx.User.Identity, new string{ "Ruolo1", "Ruolo2"});

        // avviso il RoleManagerModule che ho fatto io...
        e.RolesPopuplated = true;
      }
    }
  }
}

Il file con il sorgente va inserito nella directory /App_Code/, oppure (meglio ancora) in una class library, mentre il module va successivamente registrato nel web.config, in questo modo:

<configuration>
  <system.web>
    <httpModules>
      <add name="CustomRoles" type="ASPItalia.com.Modules.CustomRoleModule, App_Code" />
    </httpModules>
  </system.web>
</configuration>

Per maggiori informazioni su Roles API si veda:
http://tags.aspitalia.com/Role_API/

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