我通过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;
}