Enumerare i ruoli di un IPrincipal

di Daniele Bochicchio, in ASP.NET, FormsAuthentication, System.Reflection,

L'interfaccia IPrincipal non espone un metodo diretto per enumerare i ruoli associati all'utente, quindi di fatto tutte le implementazioni delle protezione in ASP.NET, dalla FormsAuthentication alla WindowsAuthentication, non possiedono questa caratteristica.
E' tuttavia possibile enumera la lista degli utenti, dato che ASP.NET ne tiene traccia internamente, utilizzando Reflection ed accedendo dunque al campo privato m_roles.

<%@ Import namespace="System.Reflection"%>
<SCRIPT RUNAT="SERVER" LANGUAGE="C#">
void Page_Load()
{
  System.Security.Principal.IPrincipal princ = HttpContext.Current.User;
  Type type = princ.GetType();

  // chiamata necessaria per far caricare i ruoli
  princ.IsInRole("Test");

  // ricavo i ruoli con reflection
  String[] roles = (String[]) type.GetField("m_roles", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(princ);
  dg.DataSource = roles;
  dg.DataBind();
}
</SCRIPT>
<asp:datagrid id="dg" runat="server" />

Ovviamente essendo basato su Reflection questo approccio non è garantito che funzioni su future versioni di ASP.NET, ma al momento per la 1.1 compie egregiamente il proprio lavoro.

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