2011-10-04 157 views
2

我有一个函数来检查一个组是否是一个组的成员。我有2个版本的功能,无论是按预期方式工作:GroupPrincipal.IsMemberOf总是返回false

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做名称的字符串比较,但它并不理想。

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

解决它像这样:

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

我仍然不知道为什么,在此先感谢

+0

第一种方法适用于我。您是否在您调用此方法的上下文中多加注意? – JPBlanc

+0

从你的问题我明白,检查的'GroupPrinciple'('gp')是一个新的原则加入到一个组? –

+0

@JPBlanc感谢您的测试 - 可能是它在对象级别比较组,并且在对象级别有一些差异,我只是不确定。 –

回答

1

我希望这有助于具有相同问题的下一个开发 -

使用框架3.5我原来的问题中的方法没有按预期工作。

0

在我的情况下,问题与组的大小有关,也描述为here

2

我明白这有点晚,但对于将来的参考,您可能想尝试一下。

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