Как установить роль по умолчанию для нового пользователя, использующего проверку подлинности Windows с SqlRoleProvider? - PullRequest
1 голос
/ 09 декабря 2008

У меня есть приложение, которое использует проверку подлинности Windows и SqlRoleProvider для проверки подлинности пользователя и управления ролями соответственно. Он отлично работает с моими тестовыми пользователями, которых я добавил в базу данных по умолчанию. Приложение требует, чтобы пользователи вошли в систему (используя учетные данные Windows), а затем смогли использовать это внутреннее приложение в качестве основного «пользователя». Если пользователя нужно добавить в роль высокого уровня, администратор будет нести ответственность за это после первого входа в систему.

С учетом сказанного, как мне добавить пользователя к роли по умолчанию при первом входе в систему? Логично, что я знаю, что мне нужно было бы вызвать Roles.IsUserInRole (), а затем добавить их, если это не так; однако, где бы я это сделал? У меня проблемы с поиском того, какое событие в Global.asax использовать.

Спасибо

EDIT: Чтобы немного расширить сценарий, я не использую систему провайдеров с полным членством из-за требований по написанию новых провайдеров, позволяющих хранить строку соединения вне web.config. Я не использую какую-либо форму регистрации или страницу входа и позволяю встроенной аутентификации Windows в IIS обрабатывать аспекты аутентификации, в то время как мой улучшенный SqlRoleProvider управляет ролями пользователей. Система работает нормально для пользователей, у которых есть роли установки через жестко закодированные тесты. Я просто ищу способ добавления новых пользователей (которые будут проходить проверку подлинности IIS) для немедленного добавления к роли «Пользователи» по умолчанию. Я думаю, что нашел это; однако сейчас я изучаю способы, чтобы он не срабатывал при каждом запросе по соображениям производительности.

Ответы [ 3 ]

1 голос
/ 09 декабря 2008

Я смог найти решение после того, как покопался и поиграл немного больше. Я добавил следующий код в мой файл Global.asax, и он выполняет то, на что я надеюсь.

protected void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs e)
{
    if (!Roles.IsUserInRole(e.Identity.Name, "Users"))
    {
        Roles.AddUsersToRole(new string[] { e.Identity.Name }, "Users");
    }
}

Я обеспокоен тем, что этот код срабатывает при каждом запросе страницы. Есть ли лучший способ ограничения, когда это происходит? Должен ли я просто добавить этот код в событие page_load целевой страницы вместо Global.asax?

0 голосов
/ 10 декабря 2008

Почему бы не поставить его при входе в систему или зарегистрироваться?

Когда вход в систему, обработайте это событие и вставьте его. Проверяйте каждый раз, когда они входят в систему.

0 голосов
/ 09 декабря 2008

Я бы добавил роль по умолчанию для пользователя сразу после его выборки.

Примерно так:

user = Membership.GetUser()
if (user != null)
{
  // default role 
  string[] defaultRoles = {"MyRole"};

  AddUsersToRoles(user, defaultRoles); 

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...