RoleManagerModule и объект RolePrincipal

Согласно моей книге, если управление ролями включено, то RoleManagerModule создает контекст безопасности пользователя, назначая объект RolePrincipal объекту HttpRequest.User. Но разве контекст безопасности уже не создан (таким образом, главный объект присваивается HttpContext.User) FormsAuthenticationModule, который вызывается до вызова RoleManagerModule?

Я спрашиваю об этом, потому что в следующем коде объект-принципал, присвоенный HttpRequest.User, уже существует, хотя RoleManagerModule еще не был вызван:

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

Итак, главный объект, созданный FormsAuthenticationModule и назначенный HttpRequest.User, позже заменен объектом RolePrincipal (созданным RoleManagerModule)?


person SourceC    schedule 15.05.2009    source источник


Ответы (1)


Согласно этой статье:

Если структура ролей включена, HTTP-модуль RoleManagerModule входит после FormsAuthenticationModule и определяет роли аутентифицированного пользователя во время события PostAuthenticateRequest, которое запускается после события AuthenticateRequest. Если запрос исходит от аутентифицированного пользователя, RoleManagerModule перезаписывает объект GenericPrincipal, созданный FormsAuthenticationModule, и заменяет его объектом RolePrincipal. Класс RolePrincipal использует API ролей, чтобы определить, к каким ролям принадлежит пользователь.

Значит ты прав.

person bbmud    schedule 15.05.2009
comment
Ага! Мой пользовательский принципал реализовывал IPrincipal, а не RolePrincipal, поэтому моя реализация RoleProvider не использовалась должным образом при обработке PostAuthenticateRequest. Большое спасибо за это, @bbmud! - person David Keaveny; 25.02.2013