查找特定用户所属的组/分发列表在活动目录中

时间:2009-10-01 22:22:37

标签: .net-3.5 active-directory ldap

让我说我在

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

我可以找到子OU中的所有组,但找到用户'bobdole'所属的所有组的唯一方法是让我查看每个组并查看他是否在'member'字段中。

不幸的是,当我查看用户'bobdole'时,我没有看到包含所有这些列表的memberOf字段,因此我必须枚举每个组\ distribution列表并查看他是哪个成员。< / p>

没有更有效的方法吗?我在c#

2 个答案:

答案 0 :(得分:4)

这将返回用户所属的所有角色(组)。

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 :(得分:1)

如果我错了,请纠正我,但我很确定“tokenGroups”不包含DistributionGroups,只包含SecurityGroups / Roles。