首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在ActiveDirectory和.NET 3.5中确定用户所属的所有组(包括嵌套组)

在ActiveDirectory和.NET 3.5中确定用户所属的所有组(包括嵌套组),可以使用以下方法:

  1. 使用System.DirectoryServices.AccountManagement命名空间

首先,需要引入System.DirectoryServices.AccountManagement命名空间,然后使用PrincipalContext类创建一个连接到ActiveDirectory的上下文,最后使用UserPrincipal类获取用户并使用GetAuthorizationGroups方法获取用户所属的所有组。

示例代码:

代码语言:csharp
复制
using System;
using System.DirectoryServices.AccountManagement;

public static List<GroupPrincipal> GetUserGroups(string userName)
{
    using (var context = new PrincipalContext(ContextType.Domain))
    {
        using (var user = UserPrincipal.FindByIdentity(context, userName))
        {
            if (user == null)
            {
                throw new ArgumentException("User not found");
            }

            return user.GetAuthorizationGroups().ToList();
        }
    }
}
  1. 使用System.DirectoryServices命名空间

首先,需要引入System.DirectoryServices命名空间,然后使用DirectoryEntry类创建一个连接到ActiveDirectory的对象,最后使用DirectorySearcher类搜索用户并使用GetGroups方法获取用户所属的所有组。

示例代码:

代码语言:csharp
复制
using System;
using System.DirectoryServices;
using System.Collections.Generic;

public static List<string> GetUserGroups(string userName)
{
    var groups = new List<string>();
    var de = new DirectoryEntry("LDAP://yourdomain.com");
    var ds = new DirectorySearcher(de);
    ds.Filter = string.Format("(&(objectClass=user)(sAMAccountName={0}))", userName);
    ds.PropertiesToLoad.Add("memberOf");
    var result = ds.FindOne();

    if (result != null)
    {
        var memberOf = result.Properties["memberOf"];

        foreach (string group in memberOf)
        {
            groups.Add(group);
        }
    }

    return groups;
}

这两种方法都可以获取用户所属的所有组(包括嵌套组)。你可以根据自己的需求选择合适的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券