Как лучше всего обрабатывать разрешения на основе ролей с помощью проверки подлинности с помощью форм в моем веб-приложении ASP.NET? - PullRequest
3 голосов
/ 29 августа 2008

Я использую элементы управления входом ASP.NET и Проверка подлинности с помощью форм для членства / учетных данных для веб-приложения ASP.NET.

У меня две роли:

  • Пользователи
  • Администраторы

Я хочу, чтобы страницы просматривались четырьмя разными группами:

  • Все (по умолчанию, справка)
  • Аноним (CreateUser, Login, PasswordRecovery)
  • Пользователи (ChangePassword, DataEntry)
  • Администраторы (Отчет)

Расширяя пример в ASP.NET КАК I Серия видео: членство и роли , я поместил эти файлы подкачки в такие папки:

Visual Studio Solution Explorer

И я использовал инструмент администрирования веб-сайта ASP.NET для настройки правил доступа для каждой папки.

Это работает, но мне кажется глупым и создает проблемы , когда Login.aspx не находится в корне и с параметром ReturnUrl из Login.aspx.

Есть ли лучший способ сделать это? Есть ли простой способ установить разрешения на уровне страницы, а не на уровне папки?

Ответы [ 3 ]

1 голос
/ 29 августа 2008

Одно из решений, которое я использовал в прошлом, это:

  1. Создайте базовую страницу с именем «SecurePage» или что-то в этом роде.
  2. Добавьте свойство 'AllowedUserRoles' на базовую страницу, которое представляет собой общий список пользовательских ролей List или List, где int - это идентификатор роли.
  3. В событии Page_Load любой страницы, расширяющей SecurePage, вы добавляете каждую разрешенную роль пользователя в свойство AllowedUserroles.
  4. В базовой странице переопределите OnLoad () и проверьте, имеет ли текущий пользователь одну из ролей, перечисленных в AllowedUserRoles.

Это позволяет настраивать каждую страницу без необходимости добавлять тонны материала в ваш web.config для управления каждой страницей.

1 голос
/ 29 августа 2008

На главной странице я определяю открытое свойство, которое включает проверку безопасности, по умолчанию true. Я также объявляю строку, которая является; ограниченный список ролей, необходимых для этой страницы.

в загрузке страницы моей главной страницы я делаю следующее

if (_secure)
{
  if (Request.IsAuthenticated)
  {
    if (_role.Length > 0)
    {
      if (PortalSecurity.IsInRoles(_role))
      {
        return;
      }
      else
      {
        accessDenied = true;
      }
    }
    else
    {
      return;
    }
  }
}

//do whatever you wanna do to people who dont have access.. bump to a login page or whatever

также вам придется поставить

вверху ваших страниц, чтобы вы могли получить доступ к расширенным свойствам вашей главной страницы

1 голос
/ 29 августа 2008

Пара решений с моей головы.

  1. Вы можете установить ограничения для каждой страницы в файле web.config. Это позволит вам иметь любую иерархию папок, которую вы хотите использовать. Однако для этого потребуется регулярно обновлять файл web.config при добавлении дополнительных страниц. Приятной частью наличия структуры папок, определяющей доступность, является то, что вам не нужно думать об этом при добавлении новых страниц.
  2. Сделайте так, чтобы ваши страницы наследовали от пользовательских классов (т. Е. EveryonePage, UserPage, AdminPage и т. Д.), И вставьте проверку роли в процедуру Page_Load.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...