当我连接到LDAP服务器并检索用户时,我得到了正确的用户记录,但我没有看到任何memberOf,isMemberOf或任何其他类似属性告诉我他们所在的组:
$query = "(&(uid={$username})(objectClass=person))";
$result = ldap_search($ldapconnection, $context, $query);
$user = ldap_get_entries($ldapconnection, $result);
但是,如果我检索LDAP组,那么我可以看到包含所有正确用户的用户列表:
$query = "(&({cn=".$groupname.")(objectClass=groupOfUniqueNames))";
$result = ldap_search($ldapconnection, $context, $query);
$group = ldap_get_entries($ldapconnection, $result); // Users in array attribute
这些组是动态groupOfUniqueNames组,每个用户都是该组的uniqueMember。
我是否遗漏了某些内容,或服务器未配置为显示memberOf(MS AD)?有没有办法获得特定用户的成员资格而没有遍历每个组?
答案 0 :(得分:2)
我不确定为什么你没有从查询中获取memberOf属性,但你应该能够通过以下方式检索用户的组成员资格:
$query = "(&(objectClass=groupOfUniqueNames)(uniqueMember=" . $username . "))";
默认情况下看起来uniqueMember没有编入索引(http://msdn.microsoft.com/en-us/library/windows/desktop/ms680520(v=vs.85).aspx),所以如果你有访问权限要做到这一点,并遇到性能问题,可能值得索引它。