У меня есть приложение, использующее авторизацию ActiveDirecotry, и было решено, что оно должно поддерживать вложенные группы AD, например:
MAIN_AD_GROUP
|
|-> SUB_GROUP
|
|-> User
Итак, пользователь не напрямую член MAIN_AD_GROUP
. Я хотел бы иметь возможность рекурсивно искать пользователя, поиск групп, вложенных в MAIN_AD_GROUP
.
Основная проблема заключается в том, что я использую .NET 3.5, а в System.DirectoryServices.AccountManagement
в .NET 3.5 есть ошибка, в результате чего метод UserPrincipal.IsMemberOf ()
не будет работать для групп с более чем 1500 пользователей . Поэтому я не могу использовать UserPrincipal.IsMemberOf ()
и нет, я тоже не могу переключиться на .NET 4.
Я решил эту последнюю проблему с помощью следующей функции:
private bool IsMember(Principal userPrincipal, Principal groupPrincipal)
{
using (var groups = userPrincipal.GetGroups())
{
var isMember = groups.Any(g =>
g.DistinguishedName == groupPrincipal.DistinguishedName);
return isMember;
}
}
Но userPrincipal.GetGroups ()
возвращает только группы, прямым участником которых является пользователь.
Как я могу заставить это работать с вложенными группами?