c# - 我如何在用户的广告中进行递归搜索,无论这是在组还是子组中?

标签 c# asp.net recursion active-directory active-directory-group

您好,我在 ASP.NET 应用程序中使用 Active Directory 和 C#,如果用户在组或子组中,我希望得到一个 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();

        }

最佳答案

您应该使用带有“true”的GetMembers(Boolean) 方法,而不是IsMemberOf 方法。它将返回组的所有成员——甚至是嵌套的。然后做一个循环,检查你的用户原则是否在结果中。检查this链接。

补充说明:试试这样的代码

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

关于c# - 我如何在用户的广告中进行递归搜索,无论这是在组还是子组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14332964/

相关文章:

c# - 在命令中初始化属性

c# - 扩展 ASP.NET WebControls : How to effectively hide public properties

asp.net - 连接字符串不适用于 Azure

c - 理解递归函数调用

javascript - 基于递归的深层 key 结构

c# - UWP Hub 需要垂直滚动

c# - 如何在 C# 中将填充的 MYSQL 表复制到另一个数据库

c# - 更新数据库时在 MVC3 中显示 "offline"页面?

c# - 具有两个短语的多阶段方法 - Elasticsearch

java - 递归 - 谜团1