Как определить все группы, к которым принадлежит пользователь (включая вложенные группы) в ActiveDirectory и .NET 3.5

У меня есть приложение, использующее авторизацию 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 () возвращает только группы, прямым участником которых является пользователь.

Как я могу заставить это работать с вложенными группами?

22
задан Simon 17 September 2012 в 04:09
поделиться