【问题标题】:GroupPrincipal.IsMemberOf always returns falseGroupPrincipal.IsMemberOf 始终返回 false
【发布时间】:2011-11-30 17:22:12
【问题描述】:

我有一个函数可以检查一个组是否是一个组的成员。我有 2 种功能变体,均未按预期工作:

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;
            }
        }

两者看起来很有希望,但总是返回 false。调用 GroupPrincipal.save 方法时,会引发对象已存在错误。

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

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

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

使用框架 3.5 - 在此先感谢

【问题讨论】:

  • 第一种方法对我来说效果很好。你在调用此方法的上下文中提供更多信息吗?
  • 从你的问题我了解到选中的GroupPrinciple (gp) 是要添加到组中的新原则?
  • @JPBlanc 感谢您的测试 - 可能是它在对象级别比较组并且在对象级别存在一些差异,我只是不确定。

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


【解决方案1】:

我知道这有点晚了,但为了将来的参考,你可能想试试这个。

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

【讨论】:

    【解决方案2】:

    我希望这可以帮助下一个遇到相同问题的开发人员:

    这样解决了:

    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; 
                }
    }
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-22
        • 1970-01-01
        • 2020-10-03
        • 2017-01-18
        相关资源
        最近更新 更多