Поиск списков групп / рассылок, к которым принадлежит конкретный пользователь, в активном каталоге - PullRequest
2 голосов
/ 02 октября 2009

Допустим, я в

OU=Groups,DC=contaco,DC=com,ct

Я могу найти все группы в подразделении, но единственный способ найти все группы, к которым принадлежит пользователь 'bobdole', - это посмотреть на каждую группу и посмотреть, находится ли он в поле 'member'.

К сожалению, когда я смотрю на пользователя 'bobdole', я не вижу поля memberOf, содержащего все эти списки, поэтому мне приходится перечислять каждую группу \ список рассылки и видеть, членом которого он является.

Нет ли более эффективного способа сделать это? Я в с #

Ответы [ 2 ]

4 голосов
/ 02 октября 2009

Возвращает все роли (группы), к которым принадлежит пользователь.

public string[] GetRolesForUser(DirectoryEntry user)
{       
    user.RefreshCache(new string[] { "tokenGroups" });

    var irc = new IdentityReferenceCollection(user.Properties["tokenGroups"].Count);
    foreach (byte[] sidBytes in user.Properties["tokenGroups"])
        irc.Add(new SecurityIdentifier(sidBytes, 0));

    var coll = new StringCollection();
    irc = irc.Translate(typeof(NTAccount));

    foreach (var ir in irc)
    {
        if (ir is NTAccount)
        {
            coll.Add(ir.ToString());
        }
    }
    var accounts = new string[coll.Count];

    coll.CopyTo(accounts, 0);
    return accounts;
}
1 голос
/ 26 октября 2009

Поправьте меня, если я ошибаюсь, но я почти уверен, что "tokenGroups" не содержит DistributionGroups, а только SecurityGroups / Roles.

...