嵌套LDAP搜索属性

时间:2019-06-26 16:06:39

标签: php ldap ldap-query

在AD服务器中,我们有一个名为directreports的属性。我希望能够在链中自上而下。首席执行官,他的直接下属是A,B,C。由于直接报告是D,E,F,而Bs直接报告是G,H,I。然后Ds的直接报告一直沿X,Y,Z等向下。

我将其视为嵌套组,但事实并非如此。我迷失了如何一起解决所有这些问题。我正在尝试用PHP做到这一点。我的php代码现在只是搜索用户,并向我提供直接报告。

<?php

function aduserlookup ($UserName)
{
    include_once 'config.php';
    $ldapconn = ldap_connect("ldap://<IP>:389") or die("Could not connect to the ldap server");

    if($ldapconn) {
        $r = @ldap_bind($ldapconn, $ldapuser."@test.com", $ldappass);
        $sr=ldap_search($ldapconn, "OU=Employees,OU=Users,DC=test,DC=com", 
"cn=" . $UserName);  
        $info = ldap_get_entries($ldapconn, $sr);
        ldap_close($ldapconn);
        return $info;
    } else {
            echo "<h4>Unable to connect to LDAP server</h4>";
    }
}

$user = aduserlookup('test');
$directreports = $user[0]['directreports'];
echo '<pre>';
var_dump($directreports);
echo '</pre>';

foreach ($directreports as $key => $value)
{
        $directreports = substr($value, 0, strpos($value, ","));
        $directreports = strstr($directreports, '=');
        $directreports = str_replace('=', '', $directreports);
        $directreports1 = aduserlookup('\'' . $directreports . '\'');
        echo $directreports1 . "<br>";
}
?>

1 个答案:

答案 0 :(得分:1)

如果您使用的是Microsoft Active Directory,并且如果我了解您要查找的内容, 您可以使用此查询Query All users that report to a department manager or their subordinates

(manager:1.2.840.113556.1.4.1941:=CN=manager,OU=users,DC=willeke,DC=com)

DirectReports是服务器生成的用户列表,直接向“经理”报告。列为报告的用户是将属性管理器属性设置为该用户的用户。列表中的每个项目都是代表用户的对象的Linked Attribute