GroupPrincipal.IsMemberOf始终返回false

时间:2011-10-04 13:45:41

标签: c# .net-3.5 active-directory

我有一个检查组是否是组成员的函数。我有两个功能变体,都没有按预期工作:

public bool IsGroupGroupMember(GroupPrincipal gp, GroupPrincipal pgp)
        {
            return gp.IsMemberOf(pgp); 
        }

 public bool IsGroupGroupMember(GroupPrincipal gp, GroupPrincipal pgp)
        {
            if (gp != null && pgp != null)
            {
                return pgp.Members.Contains(gp);
            }
            else
            {
                return false;
            }
        }

两者看起来很有希望,但总是返回假。当调用GroupPrincipal.save方法时,一个对象已经存在错误被抛出。

我运行了一个foreach循环来获取父组成员的名称,并与要添加的新成员名称进行比较,毫无疑问该成员确实存在。

我可以使用LINQ在名称上进行字符串比较,但它并不理想。

什么?如果有什么我做错了吗?是否有更好的方法来确定组中是否存在组。

使用框架3.5 - 提前感谢

3 个答案:

答案 0 :(得分:2)

我知道这有点晚了,但是对于将来的参考,你可能想尝试一下。

public bool IsGroupGroupMember(GroupPrincipal gp, GroupPrincipal pgp)
    {
        return gp.GetMembers(true).Contains(pgp);
    }

答案 1 :(得分:1)

我希望这有助于下一位开发人员遇到同样的问题:

解决这个问题:

public bool IsGroupGroupMember(GroupPrincipal gp, GroupPrincipal pgp)
        {
            PrincipalSearchResult<Principal> result = gp.GetGroups();
            Principal grp = result.Where(g => g.Sid == pgp.Sid).FirstOrDefault();

            if (grp == null)
            {
                return false; 
            }
            else
            {
                return true; 
            }
}

我仍然不知道为什么原始问题中的方法没有按预期工作。

答案 2 :(得分:0)

在我的情况下,问题与组的大小有关,如here所述。