2

我正在使用下面的代码来检查给定用户是否是 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它具有空值。

在这方面有什么帮助吗?

4

2 回答 2

1

这只是意味着:

groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName)) 

返回一个空指针,因为您的组不在您的域中。你只需要测试你的varctx和.userPrincipalgroupPrincipal

于 2011-08-26T03:58:53.603 回答
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);
 }

}

于 2013-01-16T23:21:35.657 回答