当前位置:  开发笔记 > 后端 > 正文

快速确定用户帐户是否是AD组成员的最佳方法?

如何解决《快速确定用户帐户是否是AD组成员的最佳方法?》经验,为你挑选了1个好方法。

我目前有一些代码可以提取组中的用户列表,然后遍历该组以确定给定的帐户是否存在,但似乎应该有更简洁(也许更快)的方法来实现这一点.

此代码(VB.NET)尝试使用组对象的成员属性,但即使用户是该组的成员,它也会返回false.谁能看到我在这里做错了什么?

Dim group As DirectoryEntry =  GetNetworkObject(GroupDomanName, NetworkObjectType.NetworkGroup, GroupName)
Dim user As DirectoryEntry =GetNetworkObject(UserDomainName, NetworkObjectType.NetworkUser, Login)

Return group.Properties("member").Contains(user.Path)

仅供参考:GetNetworkObject调用只返回一个directoryEntry对象,我已经确认正在为组和用户对象返回正确的对象.



1> huseyint..:

如果您使用的是.NET 3.5堆栈,则System.DirectoryServices.AccountManagement.dll程序集在AD之上有一个很好的API.可以使用以下方法来解决您的问题:

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

// Usage:
bool result = IsUserMemberOf("CONTOSO\\john.doe", "CONTOSO\\Administrators");

我不知道这种方法是如何执行的,但它是一个干净的解决方案.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有