È HttpContext.Current.User in asax globale non uguale a HttpContext.User in un metodo di azione? Ho assegnato all'utente alcuni ruoli, ma sembra che si perdano.HttpContext.Current.User! = HttpContext.User?
Il codice seguente mostra cosa sta succedendo. Entrambi gli avvertimenti vengono colpiti quando un utente ha effettuato l'accesso, prima nell'asax globale, quindi nel metodo di azione. Tuttavia danno risultati diversi.
Prima questo:
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
// ... omitted some code to check user is authenticated
FormsIdentity identity = (FormsIdentity)HttpContext.Current.User.Identity;
string[] roles = new string[] { "admin", "user" };
HttpContext.Current.User =
new System.Security.Principal.GenericPrincipal(identity, roles);
Assert(HttpContext.User.IsInRole("admin"));
}
Allora questo nel mio metodo di azione:
public ActionResult Index()
{
bool isAdmin = HttpContext.User.IsInRole("admin");
Assert(isAdmin); // this fails, isAdmin is false
// ...
}
ho usato le seguenti risorse
http://csharpdotnetfreak.blogspot.com/2009/02/formsauthentication-ticket-roles-aspnet.html
Ho ampliato la mia risposta per includere un commento sul motivo per cui ciò accade e un'illustrazione, sperare che sia d'aiuto. Prova 'Application_OnPostAuthenticateRequest' invece se devi davvero lavorare con questo invece di' WebSecurity' –