#729 - Enumerare i ruoli di un IPrincipal

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.


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.




IN EVIDENZA
MISC