Application_AuthenticateRequest: внутри этого события вы можете проверить, является ли пользователь членом роли Everyone. Если нет, вы можете добавить его автоматически. Это сдвигает задачу автоматического добавления пользователя к роли в точку аутентификации, которая по определению касается каждого пользователя. Чтобы сделать это, вы должны добавить в свой проект глобальный класс приложения и поместить в него приведенный ниже код.

Внимание! Конечно, вы должны поступать так только с низкопривилегированными ролями, такими как Everyone. Будет очень плохой идеей выполнять подобное действие с ролями другого типа.

void Application_AuthenticateRequest(Object sender, EventArgs e)
{
  if (User != null)
  {
    if (User.Identity.IsAuthenticated && Roles.Enabled)
    {
      string EveryoneRoleName =
        ConfigurationManager.AppSettings["EveryoneRoleName"];
      if (!Roles.IsUserInRole(EveryoneRoleName) &&
           Roles.RoleExists(EveryoneRoleName))
      {
        Roles.AddUserToRole(User.Identity.Name, EveryoneRoleName);
      }
    }
  }
}

Приведенный код читает имя роли Everyone из конфигурационного файла, так что оно не кодируется жестко в приложении. Затем код использует класс Roles для проверки того, принадлежит ли уже данный пользователь к этой роли, и если нет, проверяет существование самой роли. Если пользователь не ассоциирован с ролью, но уже зарегистрирован в системе, вызывается метод Roles.AddUserToRole для программного добавления пользователя к роли Everyone.

Внимание! Вы могли бы решить, что в приведенном коде нужно использовать User.IsInRole(), однако это неправильно. Когда вызывается Application_AuthenticateRequest уровня приложения, сам RoleManagerModule еще не вызван. Поэтому RolePrincipal с ассоциацией пользователя и его ролей еще не создан, а потому вызов вроде User.IsInRole("Everyone") вернет false. Позднее в коде страницы, например, в процедуре Page_Load, RolePrincipal уже инициализирован, и вызов User.IsInRole("Everyone") отработает правильно.

Использование службы Roles
с Windows-аутентификацией

Служба Roles снабжена поставщиком, интегрированным с ролями Windows для Windows-аутентификации — WindowsTokenRoleProvider. Этот поставщик извлекает информацию о членстве в группах Windows текущего зарегистрированного пользователя и предоставляет ее вашему приложению в том же виде, который вы видели выше в примере с SqlRoleProvider.

предыдущая    следующая страница    вначало главы    оглавление

946

Hosted by uCoz