У нас есть модуль безопасности, который на основе членства в группе / роли контролирует права доступа к ресурсам в ASP.Net. Я создал собственный поставщик ролей ASP.Net, который запрашивает Active Directory о членстве в группе и который используется этим модулем.
Проверка безопасности работает следующим образом для каждого запроса (кэширование используется местами по соображениям производительности, но исключено из этого списка):
- Запрос AD для списка членов группы
- База данных запросов для списка пользователей и групп с доступом к запрошенному ресурсу
- Сравните результаты из AD с результатами из базы данных. Если у пользователя явно есть права или если у группы, в которой он находится, есть права, то разрешите доступ, иначе нет.
Проблема возникает, когда у нас есть вложенные группы. Допустим, у нас есть две группы: ParentGroup и ChildGroup , где ChildGroup является членом ParentGroup в Active Directory и где наш пользователь участник ChildGroup . Согласно приведенной выше логике, если мы предоставим ChildGroup доступ к ресурсу, тогда пользователь также сможет получить доступ к ресурсу.
Теперь по логике (для меня в любом случае), если мы дадим ParentGroup доступ к ресурсу, тогда все члены, а также любые подгруппы и их члены, полученные рекурсивно, также должны иметь доступ к указанному ресурсу. Но вместо этого, из-за того, как работает моя логика, они не могут получить доступ к ресурсу. Шаг 1 из приведенного выше списка не видит ParentGroup , он видит только ChildGroup , а Шаг 2 видит только ParentGroup и не видит ChildGroup .
Итак, вопрос в том, чтобы заставить его работать так, как я описал это "логически", где я должен решить проблему, и есть ли какой-нибудь метод, который будет работать лучше , чем другой?