.net Членство запрещает вход - PullRequest
1 голос
/ 20 августа 2009

Я давно работаю с логином .net, но мой последний проект требует некоторого не очень хорошего кодирования.

У меня есть одна база данных, которая содержит таблицы и т.д. для членства .net. Есть 4 роли:

  • Администратор
  • BasicAdmin
  • PowerAdmin
  • Член

Теперь топ-3 могут войти в систему администратора, но я хочу отказать в регистрации тем, кто в роли Member, я добавил в webconfig следующее:

<authorization>
  <deny roles="Member"/>
  <deny users="?"/>
</authorization>

это работает, в некоторой степени. Он перенаправляет пользователя, который находится в роли «Участник», на страницу входа в систему, но не выдает сообщение об ошибке входа в систему, как вы получите, если вы не зарегистрированы и вводите неверные данные.

Участники могут войти в личный кабинет на сайте, который будет ограничен для администраторов.

Кто-нибудь знает, где я иду не так, я что-то упустил или это невозможно?

Спасибо

1 Ответ

1 голос
/ 20 августа 2009

Ваши участники могут войти в систему и получить доступ к содержимому участника, но затем перенаправляются, когда они пытаются что-то получить в разделе администратора. Это работает по дизайну. Участник не получит сообщение об ошибке при входе в систему, потому что он не смог войти в систему, а ему будет отказано в доступе.

Во всем приложении вы можете проверить, как человек пытается перейти на страницу, к которой у него нет доступа, и запустить сообщение, что у него нет доступа, но это дополнительная работа, но выполнимая.

Вы также можете изменить свое приложение таким образом, чтобы ссылки на определенные разделы сайта отображались только в том случае, если пользователь находится в нужной роли. Например, Roles.IsUserInRole ("role") проверит имя пользователя, выполнившего вход, в данный момент / пользователь находится в роли. В 2.0 есть также элемент управления LoginView, в который вы можете обернуть элементы управления, которые делают это для вас.

РЕДАКТИРОВАТЬ: Уточнение на основе вашего первого комментария.

Так устроен поставщик ролей. Он перенаправляет вас на страницу входа, когда вы пытаетесь получить доступ к странице, для которой вам было отказано в web.config.

Вы могли бы сделать пару вещей:

Удалите операторы deny для групп в web.config, а затем выполните одно из двух или оба:

Используйте элемент управления loginview и инкапсулируйте функциональность для роли «admin» в представлении администратора, а затем отобразите сообщение для роли «member», к которому у них нет доступа.

И / или написать код в событии загрузки страницы для страницы, которая проверяет роли и представляет сообщение и / или перенаправляет пользователя на другую страницу.

ИЛИ оставьте оператор deny в web.config для групп И

на странице загрузки события страницы входа в систему сделать что-то вроде

        If  Me.User.Identity IsNot Nothing and Me.User.Identity.Isauthenticated Then
          If Me.User.IsInRole("admin") Then
            Response.Redirect("~NoAccessToMemberStuff.htm")
          Else If Me.User.IsInRole("member") Then
            Response.Redirect("~/NoAccessToAdminStuff.htm")
          End If
    End If
...