如何检查用户是否是AD C中的通讯组列表/安全组的成员#

时间:2011-07-26 17:55:51

标签: c# active-directory active-directory-group

我正在使用下面的代码来检查给定用户是否属于AD中的通讯组。

static bool IsUserMemberOf(string userName, string groupName)
{
  using (var ctx = new PrincipalContext(ContextType.Domain))
  using (var groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName))
  using (var userPrincipal = UserPrincipal.FindByIdentity(ctx, userName))
  {
    return userPrincipal.IsMemberOf(groupPrincipal);
  }
}

我调用上面的方法,其值为IsUserMemberOf("domain\\username","domain\\groupname") 但我看到一个空指针异常,因为groupPrincipal具有空值。

在这方面有任何帮助吗?

2 个答案:

答案 0 :(得分:1)

这只是意味着:

groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName)) 

返回空指针,因为您的组不在您的域中。您只需要测试var ctxuserPrincipalgroupPrincipal

答案 1 :(得分:0)

实际上,我的群组与我要查询的用户位于不同的域中: 我在下面更改了我的程序并立即工作。

我打电话是这样的:

IsUserMemberOf("domain1\\username","domain2\\groupname")


static bool IsUserMemberOf(string userName, string groupName)
{
 using (var ctx = new PrincipalContext(ContextType.Domain,"domain1"))
 using (var groupPrincipal = GroupPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain,"domain2"), groupName))
 using (var userPrincipal = UserPrincipal.FindByIdentity(ctx, userName))
 {
    return userPrincipal.IsMemberOf(groupPrincipal);
 }

}