c # проверить, является ли пользователь членом группы? - PullRequest
14 голосов
/ 06 декабря 2010

У меня есть код, который я использую, чтобы проверить, является ли пользователь членом AD, сработал отлично,

Теперь я хочу добавить возможность проверить, является ли пользователь также членом группы!

что мне нужно изменить, чтобы добиться этого, я проделал некоторую работу, но она не работает!

так вот мой код:

        //Authenticate a User Against the Directory
        private bool Authenticate(string userName,string password, string domain)
        {

            if (userName == "" || password == "")
            {
                return false;
            }

            bool authentic = false;
            try
            {
                DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain,userName, password);
                object nativeObject = entry.NativeObject;
                authentic = true;
            }
            catch (DirectoryServicesCOMException) { }
            return authentic;
        }

Я хочу сделать этокак это:

private bool Authenticate(string userName,string password, string domain, string group)

Ответы [ 3 ]

24 голосов
/ 06 декабря 2010

Недоступно в Windows XP или более ранней версии.

В любом случае, чтобы проверить членство в группе, вы можете использовать этот код:

bool IsInGroup(string user, string group)
{
    using (var identity = new WindowsIdentity(user))
    {
        var principal = new WindowsPrincipal(identity);
        return principal.IsInRole(group);
    }
}
7 голосов
/ 06 декабря 2010

В ASP.Net вы будете использовать Page.User.IsInRole("RoleName") или в Windows вы можете использовать System.Threading.Thread.CurrentPrincipal.IsInRole("RoleName")

6 голосов
/ 05 января 2011

Я решаю это с помощью этого кода

public bool AuthenticateGroup(string userName, string password, string domain, string group)
    {


        if (userName == "" || password == "")
        {
            return false;
        }

        try
        {
            DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, userName, password);
            DirectorySearcher mySearcher = new DirectorySearcher(entry);
            mySearcher.Filter = "(&(objectClass=user)(|(cn=" + userName + ")(sAMAccountName=" + userName + ")))";
            SearchResult result = mySearcher.FindOne();

            foreach (string GroupPath in result.Properties["memberOf"])
            {
                if (GroupPath.Contains(group))
                {
                    return true;
                }
            }
        }
        catch (DirectoryServicesCOMException)
        {
        }
        return false;
    }

он отлично работает для меня, и его можно использовать с машиной, не входящей в контроллер домена / Active Directory

Спасибо всемза помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...