我正在使用下面的代码来检查给定用户是否属于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
具有空值。
在这方面有任何帮助吗?
答案 0 :(得分:1)
这只是意味着:
groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName))
返回空指针,因为您的组不在您的域中。您只需要测试var ctx
,userPrincipal
和groupPrincipal
。
答案 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);
}
}