Как реализовать безопасность на основе ролей с использованием динамических данных и Active Directory? - PullRequest
3 голосов
/ 03 марта 2009

Каков наилучший способ обеспечения безопасности с использованием ролей активных каталогов на сайте динамических данных asp.net?

Я хотел бы ограничить определенные виды (и соответствующие ссылки) определенными ролями. пользователь A может просматривать только действия списка для таблицы x, а пользователь B может просматривать только действия списка для таблицы y

Ответы [ 3 ]

2 голосов
/ 04 марта 2009

Я сделал это во многих приложениях.

Включите проверку подлинности Windows для вашего приложения.

Создайте некоторый объект, который может хранить учетные данные пользователя и хранить этот объект в сеансе для быстрого восстановления. Если его там нет, вы можете быстро восстановить его. У меня обычно есть каждая роль, например:


enum USER_ROLE : int
{
  Role1 = 1,
  Role2 = 2,
  Role3 = 4,
  Role4 = 8,
  etc
}

if (Context.User.IsInRole("Roll1Name")) YourUserObject.Roles += USER_ROLE.Role1;
if (Context.User.IsInRole("Roll2Name")) YourUserObject.Roles += USER_ROLE.Role2;
etc

Затем в любое время, когда необходимо защитить элемент управления, я передаю его в функцию, которая принимает HtmlControl и свойство, основанное на роли пользователя и требованиях безопасности для этого элемента управления.

Например. bool SetControlSecurity (HtmlControl ctrl, int iUserRoles, int iControlRoles, действие ACTION)

Таким образом, пример выполнения панели может быть:

SetControlSecurity (pnlUserInfo, YourUserObject.Roles, eRole.Role2, ACTION.Hide);

У меня обычно также есть парам к типу действий, выполняемых при сбое защиты, таких как скрытие, чтение только, очистка данных и т. Д. *

Сравнение роли в функции легко:


bool bHasAccess = ((iUserRole & iControlRoles) > 0);
if (bHasAcess)
{
  // leave the control or make sure it is visible etc
}
else
{
  // take action to secure the control based on the action
}

Надеюсь, это поможет.

1 голос
/ 19 марта 2009

У меня есть несколько статей на эту тему в моем блоге здесь. A Решение для разрешения на основе атрибутов DynamicData с использованием ролей пользователя и здесь. DynamicData: разрешения на основе базы данных - часть 1 , и я также хотел бы взглянуть на Защита образца динамических данных в кодовом комплексе , в котором используется обработчик маршрута.

0 голосов
/ 03 марта 2009

Вы можете просто использовать провайдеров ASP.NET Active Directory-членства и ролей для аутентификации \ авторизации пользователей в приложении. Затем вы можете вызвать Roles.IsUserInRole , где бы вы ни хотели проверить членство в роли AD, чтобы проверить, что пользователи являются частью соответствующей группы (групп) перед отображением содержимого.

...