您好,我在 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/