【发布时间】:2017-09-22 23:03:24
【问题描述】:
大家好,
我知道我的问题一定有似曾相识的一面,但我没有通过 stackoverflow 或其他方式找到任何解决方案。 所以我一直在尝试创建一个允许连接到 ldap 的函数,然后检查我的用户的 id 和 pwd,然后检查他所在的组。 当我在一个“部分”中完成此功能时,它起作用了。 但我想在三个不同的功能中做到这一点,这样我就可以一个一个地处理它。 所以现在我有了连接 ldap 的功能:
function ldapConnection() {
$ldapConnection = ldap_connect(LDAP_SERVER);
ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConnection, LDAP_OPT_REFERRALS, 0);
return $ldapConnection;
}
它返回一个标识符 LDAP 链接,因此连接正常。
然后我有检查登录和密码的功能:
public function checkLoginPwd($login, $pwd) {
$ldapConnexion = $this->ldapConnection();
if ($bind = ldap_bind($ldapConnexion, $login, $pwd)) {
return true;
//ldap_close($ldapConnexion);
} else {
return false;
}
}
然后是我遇到问题的函数。
public function checkUserRights($login, $pwd, $ldapConnection) {
//Récupération login
$loginAccount = "(sAMAccountName=$login)";
//Suppression de "myGroup\"
$filter = str_replace("myGroup\\", "", $loginAccount);
$attr = array("memberof");
//Recherche
$result = ldap_search($ldapConnection, LDAP_BASE_DN, $filter, $attr);
$entries = ldap_get_entries(ldap_connect(LDAP_SERVER), $result);
foreach ($entries[0]['memberof'] as $grps) {
if (strpos($grps, "VPN")) {
$access = 2;
break;
}
if (strpos($grps, "Users"))
$access = 0;
}
if ($access != 0) {
$_SESSION['user'] = $login;
$_SESSION['access'] = $access;
return true;
} else {
return false;
}
如果我尝试以这种方式连接,我会收到以下消息错误: ldap_search():搜索:操作错误 即使我一次性完成它确实有效。
如果有人可以帮助我,那就太好了......
编辑:
所以你知道,如果我对 $filter 进行 var 转储,我会得到:string'(sAMAccountName=myLogin)'。 对于 $ldapConnection,它是资源(13,ldap 链接),对于 LDAP_BASE_DN,它是字符串 'DC=myGroup, DC=fr',$attr 是数组(大小=1) 0 => 字符串'memberof'(长度=8)。
【问题讨论】:
标签: php ldap connection