HttpContext.Current.User! = HttpContext.User?
JestHttpContext.Current.User w globalnym asaxie nie to samo coHttpContext.User w metodzie akcji? Przypisałem użytkownikowi pewne role, ale wydaje się, że się gubią.
Poniższy kod pokazuje, co się dzieje. Oba assety trafiają, gdy użytkownik jest zalogowany, najpierw w globalnym asaxie, a następnie w metodzie akcji. Jednak dają różne wyniki.
Najpierw:
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"));
}
Wtedy to w mojej metodzie akcji:
public ActionResult Index()
{
bool isAdmin = HttpContext.User.IsInRole("admin");
Assert(isAdmin); // this fails, isAdmin is false
// ...
}
Użyłem następujących zasobów
http://csharpdotnetfreak.blogspot.com/2009/02/formsauthentication-ticket-roles-aspnet.html