【问题标题】:get all Active Directory groups a user is member in获取用户所属的所有 Active Directory 组
【发布时间】:2015-12-07 13:19:21
【问题描述】:

我正在寻找一种简单的方法来获取给定用户所属的所有 Active Directory 组。UserPrincipal 中有两种方法,但都不符合此要求:

  • GetGroups():返回所有组,但不递归:

    此方法仅返回委托人直接所属的组;不执行递归搜索。

  • GetAuthorizationGroups():递归工作,但只返回安全组(无通讯组)

    此函数仅返回属于安全组的组;不返回通讯组。

很遗憾,我找不到像 GetAllGroups()GetDistributionGroups() 这样的东西。是否有一个简短的解决方案来递归获取安全和通讯组?

【问题讨论】:

    标签: c# active-directory userprincipal


    【解决方案1】:

    我最终自己编写了该方法,它非常短。
    最有用的是Principal 本身包含.GetGroups() 方法,因此很容易编写一个递归方法来返回给定User-oder GroupPrincipal 的所有组。

    代码:

    private static HashSet<GroupPrincipal> GetAllGroups(Principal principal)
    {
        Dictionary<string, GroupPrincipal> groups = new Dictionary<string, GroupPrincipal>();
        foreach (GroupPrincipal group in principal.GetGroups())
        {
            groups[group.Sid.ToString()] = group;
            foreach (GroupPrincipal childGroup in GetAllGroups(group))
            {
                groups[childGroup.Sid.ToString()] = childGroup;
            }
        }
        return new HashSet<GroupPrincipal>(groups.Values);
    }
    

    【讨论】:

    • 广告组的绝佳解决方案!但请注意,不会返回本地组或预定义的安全主体。因此,对于某些情况,它应该与其他方法结合使用(例如WindowsIdentity.GetCurrent().Groups;)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多