我通過LDAP(來自Java和PHP)查詢Active Directory以構建用戶所屬的所有組的列表。該列表必須包含所有至少包含用戶直接參與的組的所有組(組織單位可選)。例如:AD via LDAP - 如何返回查詢中的所有祖先組?
User1是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;
}