Tar*_*sov 1 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();
}
Run Code Online (Sandbox Code Playgroud)
IsMemberOf您应该使用GetMembers(Boolean)'true' 代替方法.它将返回组中的所有成员 - 甚至是嵌套的.然后创建一个循环来检查您的用户原则是否在结果中.检查此链接.
附加说明:尝试此类代码
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1285 次 |
| 最近记录: |