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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.


