我正在编写一个独立的应用程序,需要使用给定的AD帐户名称来确定用户是否是特定组的成员。我在.NET(C#)中编写应用程序。 AD中的结构如下所示:
组织
一队
大卫(使用者)
团体
应用A
小组1(上方小组)
仅列出David的成员身份就不会表明他是Application A组的成员。
我从Microsoft的文档中了解到(使用原理)我可以简单地使用IsInRole调用,但是我找不到任何不需要David登录到计算机或运行执行检查的应用程序的情况。我认为我对安全模型的有限理解在这里也起作用。
有人能指出我正确的方向吗?我正在寻找的是关于如何在C#中解决以上问题的提示(参考,技巧,摘要),而不必依靠David来运行任何应用程序。
让我知道是否可以澄清。
最佳答案
添加对DirectoryServices.AccountManagement的引用
然后添加一个using语句:
using System.DirectoryServices.AccountManagement;
然后在您的主过程中(或其他需要的地方,调用过程IsMember:
string userName = "David";
string GroupName = "Team 1";
bool test = IsMember(userName, GroupName);
public static bool IsMember(string UserName, string GroupName)
{
try
{
UserPrincipal user = UserPrincipal.FindByIdentity(
new PrincipalContext(ContextType.Domain),
UserName);
foreach (Principal result in user.GetAuthorizationGroups())
{
if (string.Compare(result.Name, GroupName, true) == 0)
return true;
}
return false;
}
catch (Exception E)
{
throw E;
}
}
如果David在小组1中,则过程将返回true,否则返回false。