Я запрашиваю Active Directory через LDAP (из Java и PHP), чтобы создать список всех групп, членом которых является пользователь. Этот список должен содержать все наименьшие все группы (необязательные организационные единицы), которые содержат группы, членом которых пользователь является непосредственно. Например:
Пользователь1 является членом GroupA, GroupB и GroupC.
GroupA является членом GroupD.
Я ищу способ создания запроса LDAP, который будет возвращать GroupA, GroupB, GroupC, и GroupD одновременно.
Моя текущая реализация приведена ниже, но я ищу более эффективный способ сбора этой информации.
Текущая наивная реализация (в псевдокоде)
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;
}