Ist HttpContext.Current.User in globalem asax nicht dasselbe wie HttpContext.User in einer Aktionsmethode? Ich habe dem Benutzer einige Rollen zugewiesen, aber sie scheinen verloren zu gehen.
Der folgende Code zeigt, was passiert. Beide Asserts werden bei der Anmeldung eines Benutzers zuerst in global asax und dann in der Aktionsmethode ausgelöst. Sie geben jedoch andere Ergebnisse.
Zuerst das:
%Vor%Dann dies in meiner Aktionsmethode:
%Vor%Ich habe die folgenden Ressourcen verwendet
Ihre Frage-Tags sagen "aspnet-mvc (3 und 4)", also haben Sie die Möglichkeit, Folgendes zu verwenden, um Ihr Leben zu erleichtern? Wenn Sie Einfache Mitgliedschaft von der MVC 4 Internet Application Vorlage in VS2012 wird dies für Sie einfach out of the box funktionieren):
WebSecurity.CreateUserAndAccount(name, password)
- erstellt werden ein Benutzer Roles.AddUserToRole
(und AddUserToRoles
) - Hinzufügen eines Benutzers zu einer Rolle Roles.IsUserInRole
- Testet, ob ein Benutzer in einer Rolle ist [Authorize(Roles = "admin")]
- [Authorize]
kann Rollen auf einem gesamten Controller oder auf einer Aktion erzwingen CreateUserAndAccount
hat den Vorteil, dass auch Eigenschaften für das UserProfile einfach festgelegt werden können, zum Beispiel:
Bearbeiten , mir ist klar, dass das obige nicht Ihre ursprüngliche Frage zu .User
-Eigenschaftsäquivalenz beantwortet.
HttpContext
in einem Controller ist eine Eigenschaft: Controller.HttpContext
. HttpContext
in global.asax.cs ist die statische Klasse, deshalb verwenden Sie HttpContext.Current
. Sie beziehen sich auf das Gleiche.
Wenn Sie den folgenden Code ausführen, können Sie sehen, dass sie scheinbar der "gleiche Prinzipal" sind. Die Frage ist also, was mit den Rollen passiert ist, die Sie zugewiesen haben?
%Vor% Das Problem ist, dass Sie GenericPrincipal
bis .User
zugewiesen haben. Abhängig von RoleProvider
kann dies überschrieben werden (z. B. durch RoleManagerModule
) während PostAuthenticateRequest
und (zum Beispiel) in RolePrincipal
umgewandelt werden. Dies kann dann zurück in die Datenbank verschoben werden (wiederum abhängig vom Anbieter), um die Rollen zu erhalten, also Ihre Rollen überschreiben. Wenn Sie die Arbeit in Application_OnPostAuthenticateRequest
erledigen, könnten Sie in Ordnung sein.
Tags und Links asp.net-mvc asp.net-mvc-3 asp.net asp.net-mvc-4 forms-authentication