HttpContext.Current.User! = HttpContext.User?

ÉHttpContext.Current.User no asax global não é o mesmo queHttpContext.User em um método de ação? Eu atribui ao usuário alguns papéis, mas eles parecem se perder.

O código abaixo mostra o que está acontecendo. Ambas as declarações são atingidas quando um usuário está conectado, primeiro no asax global e, em seguida, no método de ação. No entanto, eles dão resultados diferentes.

Primeiro isto:

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"));
}

Então isso no meu método de ação:

public ActionResult Index()
{
    bool isAdmin = HttpContext.User.IsInRole("admin");

    Assert(isAdmin); // this fails, isAdmin is false

    // ...
}

Eu usei os seguintes recursos

Esta resposta SO

http://csharpdotnetfreak.blogspot.com/2009/02/formsauthentication-ticket-roles-aspnet.html

questionAnswers(1)

yourAnswerToTheQuestion