我正在编写一个独立的应用程序,需要使用给定的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。

10-02 09:23