HttpContext.Aktuelle.User != HttpContext.Benutzer?

Ist HttpContext.Aktuelle.Benutzer in der global asax nicht das gleiche wie HttpContext.Benutzer in einer action-Methode? Ich wies den Benutzer einige Rollen, aber Sie scheinen sich zu verirren.

Den code unten zeigt, was passiert ist. Beide Behauptet, dass man geschlagen wird, wenn ein Benutzer angemeldet ist, zuerst in der global asax, dann die action-Methode. Aber Sie geben unterschiedliche Ergebnisse.

Ersten dieses:

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

Dann in meiner action-Methode:

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

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

    //...
}

Ich habe folgende Ressourcen

Diese SO beantworten

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

  • Ich habe, erweitert meine Antwort um ein Kommentar darüber, warum dies geschieht, und eine Darstellung, hoffe, das hilft. Versuchen Application_OnPostAuthenticateRequest stattdessen, wenn Sie wirklich so arbeiten müssen, statt WebSecurity
InformationsquelleAutor Dr Blowhard | 2013-05-22
Schreibe einen Kommentar