Как получить всех пользователей в роли, включая роли в ролях?
У меня есть сайт Sitecore, который использует модуль AD для подключения к Active Directory. Допустим, у нас есть определенная в Sitecore роль под названием "Авторы контента". Авторы контента могут содержать отдельные учетные записи пользователей - "jsmith" - или могут содержать целую группу AD - "Северо-восточные менеджеры". Мне нужно получить список всех пользователей, которые находятся в роли "Авторы контента", прямо или косвенно (через группу AD). Прямо сейчас мой код, похоже, возвращает только тех пользователей, которые непосредственно являются членами роли "Авторы контента". Вот мой код:
string[] _roleUserNames = System.Web.Security.Roles.GetUsersInRole("Content Authors");
Я предполагал, что этот код вернет "эффективный" список всех, кто в этой роли. Кажется, возвращаются только люди, которые непосредственно в этой роли. Кто-нибудь знает, есть ли какой-то другой способ получить всех в роли?
2 ответа
Я выяснил, что это особая проблема для Sitecore, поскольку Sitecore допускает роли в ролях, и эта функциональность построена на основе членства в MS ASP.NET. Чтобы получить всех пользователей в роли, включая "косвенных" пользователей, вы должны использовать следующий код:
IEnumerable<User> _roleUsers = Sitecore.Security.Accounts.RolesInRolesManager.GetUsersInRole(Role.FromName("Content Authors"), true);
Это даст вам всех пользователей, включая косвенных пользователей.
Я знаю, что это старо, но я столкнулся с той же самой проблемой, и вышеупомянутое решение не работало для нас. Сторонние пользователи в Active Directory не были найдены, только косвенные пользователи в ролях Sitecore.
Дальнейшее изучение поставщика ролей модуля AD, по-видимому, показывает, что существует код для косвенных ролей, но, кажется, что вызов к нему не работает. dotPeek показал мне, что для параметра существует явное значение "false", которое запускает косвенный поиск ролей пользователей и не считывает данные из этого параметра.
Нам нужно было декомпилировать код AD 1.1, а затем исправить эту часть, чтобы заставить его работать.