Tutaj powinno być możliwe utworzenie zapytania z tym filtrem:
(&(objectClass=user)(sAMAccountName=yourUserName)
(memberof=CN=YourGroup,OU=Users,DC=YourDomain,DC=com))
a kiedy uruchomisz to na serwerze LDAP, jeśli otrzymasz wynik, Twój użytkownik „yourUserName” jest rzeczywiście członkiem grupy „CN = YourGroup, OU = Users, DC = YourDomain, DC = com
Spróbuj i zobacz, czy to działa!
Jeśli używasz C # / VB.Net i System.DirectoryServices, ten fragment powinien załatwić sprawę:
DirectoryEntry rootEntry = new DirectoryEntry("LDAP://dc=yourcompany,dc=com");
DirectorySearcher srch = new DirectorySearcher(rootEntry);
srch.SearchScope = SearchScope.Subtree;
srch.Filter = "(&(objectClass=user)(sAMAccountName=yourusername)(memberOf=CN=yourgroup,OU=yourOU,DC=yourcompany,DC=com))";
SearchResultCollection res = srch.FindAll();
if(res == null || res.Count <= 0) {
Console.WriteLine("This user is *NOT* member of that group");
} else {
Console.WriteLine("This user is INDEED a member of that group");
}
Uwaga: to przetestuje tylko bezpośrednie członkostwo w grupach, a nie członkostwo w tak zwanej „grupie podstawowej” (zwykle „cn = Użytkownicy”) w Twojej domenie. Nie obsługuje zagnieżdżonych członkostw, np. Użytkownik A jest członkiem grupy A, która jest członkiem grupy B - fakt, że użytkownik A jest w rzeczywistości członkiem grupy B, również nie jest tu odzwierciedlany.
Marc