Pytam Active Directory przez LDAP (z Java i PHP), aby utworzyć listę wszystkich grup, których członkiem jest użytkownik. Ta lista musi zawierać wszystkie najmniej wszystkie grupy (jednostki organizacyjne opcjonalne), które zawierają grupy, których użytkownik jest bezpośrednio członkiem. Na przykład:AD za pośrednictwem LDAP - Jak mogę zwrócić wszystkie grupy nadrzędne z zapytania?
Użytkownik1 jest członkiem GroupA, GroupB i GroupC.
Grupa A jest członkiem GroupD.
Szukam sposobu na skonstruowanie zapytania LDAP, które spowoduje powrót GroupA, GroupB, GroupC, i GroupD wszystkie naraz.
Moja obecna implementacja jest poniżej, ale szukam bardziej skutecznego sposobu na zebranie tych informacji.
Aktualny Naiwny Wykonanie (w pseudo-kodzie)
user = ldap_search('samaccountname=johndoe', baseDN);
allGroups = array();
foreach (user.getAttribute('memberOf') as groupDN) {
allGroups.push(groupDN);
allGroups = allGroups.merge(getAncestorGroups(groupDN));
}
function getAncestorGroups(groupDN) {
allGroups = array();
group = ldap_lookup(groupDN);
parents = group.getAttribute('memberOf');
foreach (parents as groupDN) {
allGroups.push(groupDN);
allGroups = allGroups.merge(getAncestorGroups(groupDN));
}
return allGroups;
}