使用以下代码,我可以轻松查看提供的用户是否存在于提供的组中。
public static bool IsInGroup(string user, string group)
{
using (var identity = new WindowsIdentity(user))
{
var principal = new WindowsPrincipal(identity);
return principal.IsInRole(group);
}
}
但是,给出如下字符串列表: -
User1
User2
User3
Group1
Group2
Group3
通过循环这个字符串列表在c#中是否有任何方法,以检查每个条目是否是AD组?
例如,User3实际上是一个组名,但是通过查看列表,您会认为它是普通的AD用户。
是否有任何解析名称的方法,以查看它是否作为我的AD域中的组存在。
我基本上希望能够运行一个名称和组列表,并查看给定的用户名(例如“Bob”)是否在列表中,或者是否存在于此列表中的一个组中,因此如果上面列表中的条目是AD组,我想运行类似于上面的函数,以查看用户是否存在于组内。
答案 0 :(得分:11)
这不是太糟糕。您需要参考以下程序集:
System.DirectoryServices
System.DirectoryServices.Protocols
System.DirectoryServices.AccountManagement
然后你可以使用这样的东西:
var groupName = "developers";
using (var context = new PrincipalContext(ContextType.Domain))
{
var groupPrincipal = GroupPrincipal.FindByIdentity(context, groupName);
}
您可以更改PrincipalContext构造函数以将ContextType.Machine用于本地计算机,如果需要,您可以将域名添加为第二个参数,但对于本地域,它应该将其选中。
[edit]此外,如果FindByIdentity方法不匹配,它将返回null。此外,您还可以从目录服务中获取成员用户和其他有用信息。
答案 1 :(得分:1)
检查此链接。基本上将组转换为角色,然后您可以使用标准成员资格提供程序功能来使用它。
http://slalomdev.blogspot.com/2008/08/active-directory-role-provider.html