2009-05-15 7 views
3

Wenn die Rollenverwaltung aktiviert ist, erstellt RoleManagerModule gemäß meinem Buch den Sicherheitskontext des Benutzers, indem RolePrincipal Objekt der HttpRequest.User zugewiesen wird. Aber ist der Sicherheitskontext nicht bereits erstellt (also das Hauptobjekt wird HttpContext.User zugewiesen), indem FormsAuthenticationModule aufgerufen wird, das vor dem Aufruf RoleManagerModule aufgerufen wird?RoleManagerModule und RolePrincipal-Objekt

Ich frage dies, weil in der folgenden Code Hauptaufgabe zugewiesen HttpRequest.User bereits vorhanden ist, obwohl RoleManagerModule noch nicht genannt worden:

protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
{ 
    if (User.Identity.IsAuthenticated && Roles.Enabled) 
    { 
     //here we subscribe user to a role via Roles.AddUserToRole() 
    }  
} 

So ist Hauptaufgabe, erstellt von FormsAuthenticationModule und zugewiesen HttpRequest.User, später ersetzt durch RolePrincipal Objekt (erstellt von RoleManagerModule)?

Antwort

6

Nach this article:

Wenn die Rollen Rahmen aktiviert ist, werden die Schritte der Rolemanagermodule HTTP-Modul nach dem FormsAuthenticationModule in und identifiziert die authentifizierten Benutzer-Rollen während des PostAuthenticateRequest Veranstaltung, die nach dem AuthenticateRequest Ereignis ausgelöst. Wenn die Anfrage von einem authentifizierten Benutzer stammt, überschreibt das RoleManagerModule das von FormsAuthenticationModule erstellte GenericPrincipal-Objekt und ersetzt es durch ein RolePrincipal-Objekt. Die RolePrincipal-Klasse verwendet die Rollen-API, um zu bestimmen, welchen Rollen der Benutzer angehört.

Sie haben also recht.

+0

vielen Dank – SourceC

+0

Gah! Mein benutzerdefinierter Prinzipal implementierte IPrincipal, nicht RolePrincipal, daher wurde die Implementierung meines RoleProviders nicht korrekt verwendet, wenn PostAuthenticateRequest bearbeitet wurde. Vielen Dank dafür, @bbmud! –