我还没有多少展示,因为我根本不熟悉ldap(开放目录),而且我在理解如何实际查询群组方面遇到了一些麻烦。特定用户。使用Zend_Auth_Adapter_Ldap(),
$ldap = array(
array('host' => 'od-master.foobar.net',
'baseDn' => 'cn=users,dc=foobar,dc=net',
'bindRequiresDn' => true,
'accountCanonicalForm' => 2));
$authAdapter = new Zend_Auth_Adapter_Ldap($ldap);
// Set the input credential values to authenticate against
$authAdapter->setIdentity($form->getValue('username'));
$authAdapter->setCredential($form->getValue('password'));
//etc
我正在对帐户进行身份验证,但现在我需要检索此用户所属的群组列表。我一般不会先尝试帮助而不先尝试帮助,但我甚至无法达到这一点。非常感谢任何帮助。
如果我的问题不明显:您如何查询特定用户的所有群组?
=====编辑=====
根据建议,这是我最近的尝试:
$attributes = array('memberOf'); //also tried member
$users = $ldapAdapter->search('cn=username', $ldapAdapter->getBaseDn(), Zend_Ldap::SEARCH_SCOPE_SUB, $attributes);
foreach ($users as $user) {
var_dump($user);
}
我也尝试在Zend_Ldap之外执行此操作失败。
$attributes = array('memberOf'); //also tried member
$result = ldap_search($ldapAdapter->getResource(), $baseDn, 'cn=username', $attributes);
$info = ldap_get_entries($ldapAdapter->getResource(), $result);
这会产生一个空数组。任何进一步的方向将不胜感激。
=====编辑2 =====
所以我试图完全删除Zend_Ldap,这样我就可以更轻松地测试事情,这就是我最终得到的结果是数组(' count' => 0)返回。
$resource = ldap_connect('od-master.foobar.net', 389);
ldap_set_option($resource, LDAP_OPT_PROTOCOL_VERSION, 3);
$bind = ldap_bind($resource, 'uid=johnc,cn=users,dc=foobar,dc=net', '***');
$result = ldap_search($resource, 'cn=users,dc=foobar,dc=net', '(cn=username)');
$info = ldap_get_entries($resource, $result);
答案 0 :(得分:1)
您只需添加一个Ldap_Search,点击cn=users,dc=foobar,dc=net
,使用类似cn=username
的过滤器作为名为memberOf
的属性。
在LDAP中编写SEARCH时,请提供:
答案 1 :(得分:1)
对于遇到此问题的其他人来说,这是我提出的解决方案。
$groups = array();
$attributes = array('cn');
$users = $ldapAdapter->search('(&(objectClass=posixGroup)(memberUid='. $form->getValue('username') .'))', 'cn=groups,dc=foobar,dc=net', Zend_Ldap::SEARCH_SCOPE_SUB, $attributes);
foreach ($users as $user) {
$groups[] = $user['cn'][0];
}
答案 2 :(得分:0)
我知道这是关于Zend Framework的,但我找到了如何使用ZF2查询组Zend \ Ldap \ Ldap
$ldap = $adapter->getLdap();
$filter = \Zend\Ldap\Filter::equals('samaccountname', 'my_username');
$basedn = 'CN=Users,DC=foobar,DC=net';
$attributes = array('memberOf');
$scope = \Zend\Ldap\Ldap::SEARCH_SCOPE_SUB;
$result = $ldap->search($filter, $basedn, $scope, $attributes);
答案 3 :(得分:0)
Open Directory(Apple在OS / X上实现OpenLDAP)在编译时没有添加memberOf overlay支持。因此,memberOf将无法在标准Mac OS X系统上运行。
正如OP所发现的那样,解决方法需要实现组的集合并构建每用户组成员资格以实现相同的目标(或者每次更改LDAP数据存储区时手动添加此缺少的信息)。 / p>