Как реализовать ролевую безопасность с использованием динамических данных и Active Directory?
-
03-07-2019 - |
Вопрос
Как лучше всего реализовать безопасность с использованием ролей активного каталога на сайте динамических данных asp.net?
Я хотел бы ограничить определенные представления (и соответствующие ссылки) определенными ролями.то естьпользователь A может просматривать только действия списка для таблицы x, а пользователь B может просматривать только действия списка для таблицы y.
Решение
У меня есть несколько статей на эту тему блог здесь Решение для разрешений на основе атрибутов DynamicData с использованием ролей пользователей и здесьДинамическиеДанные:Разрешения на основе базы данных. Часть 1. и я бы еще посмотрел Защита образца динамических данных в codeplex который использует обработчик маршрута.
Другие советы
Я сделал это во многих приложениях.
Включите проверку подлинности 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 eAction)
Итак, примером создания панели может быть:
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
}
Надеюсь, это поможет.
Вы можете просто использовать поставщиков членства и ролей ASP.NET Active Directory для аутентификации и авторизации пользователей в приложении.Тогда вы можете позвонить в Роли.IsUserInRole где бы вы ни хотели проверить членство в роли AD, чтобы проверить, являются ли пользователи частью соответствующих групп, прежде чем отображать содержимое.