我如何在广告中与用户进行递归搜索,无论这是在组还是子组中

本文关键字:搜索 用户 递归 | 更新日期: 2023-09-27 17:53:02

嗨,我在ASP中使用活动目录和c#。. NET应用程序,我想我得到一个bool如果用户是在一个组或在这个子组。我写了一个方法,让我知道用户是否在组中,但不在这个子组中:(

如何在方法中进行递归搜索:

这里是我的代码:

public static bool IsUserInGroup(string dc, string User, string group) 
        {
            PrincipalContext ctx = new PrincipalContext(ContextType.Domain, dc);
            GroupPrincipal p = GroupPrincipal.FindByIdentity(ctx, group);
            UserPrincipal u = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, User);
            bool isMember = u.IsMemberOf(p); 
            return isMember; 
        }
static void Main(string[] args)
        {
            string dc = "company.com";
            string user = "test.w";
            bool isadmin = IsUserInGroup(dc, user, "TAdmin");
            bool isUser = IsUserInGroup(dc, user, "TUser");
            Console.WriteLine("Admin: " + isadmin);
            Console.WriteLine("User: " + isUser);
            Console.ReadLine();
        }

我如何在广告中与用户进行递归搜索,无论这是在组还是子组中

代替IsMemberOf方法,您应该使用带有'true'的GetMembers(Boolean)。它将返回组的所有成员-甚至嵌套的成员。然后循环检查结果中是否包含了用户原则。点击此链接。

附加注意:试试这样的代码

public static bool IsUserInGroup(string dc, string User, string group) 
{
    bool found = false;
    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, dc);
    GroupPrincipal p = GroupPrincipal.FindByIdentity(ctx, group);
    UserPrincipal u = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, User);
    found = p.GetMembers(true).Contains(u);
    p.Dispose();
    u.Dispose();
    return found; 
}