У меня есть приложение, использующее авторизацию ActiveDirecotry, и было решено, что оно должно поддерживать вложенные группы AD, например:
MAIN_AD_GROUP
|
|-> SUB_GROUP
|
|-> User
Итак, пользователь не напрямую aчлен 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()
возвращает только те группы, непосредственным участником которых является пользователь.
Как заставить это работать с вложенными группами?