gpt4 book ai didi

PHP LDAP : How to search if user is in group?

转载 作者:可可西里 更新时间:2023-11-01 12:54:28 24 4
gpt4 key购买 nike

如何使用 php_ldap 模块检查用户是否属于某个组?

我对 ldap 完全陌生,因此有点困惑......

到目前为止,通过谷歌搜索我已经想到了这个:

$ds=ldap_connect($ldapHost, $ldapPort);
if ($ds) {
$r=ldap_bind($ds, $ldapRdn, $ldapPassword);
$filter = "(sAMAccountName=" . $uid . ")";
$attr = array("memberof");
$result = ldap_search($ds, $ldapDN, $filter, $attr) or exit("Unable to search LDAP server");

我不确定这是否正确,因为它是从特定于 AD 的 soemthign 中获取的。问题似乎是 $ldapDN。这就是我要搜索的内容吗?我的组“定义”是:

cn=User,ou=Profiles,ou=App_DEV,ou=ApplicationRights,O=MyCompany.COM

我该如何做这个检查?

编辑:

这是我在“接受的答案”和试错法的帮助下找到的解决方案。我认为答案在很大程度上取决于您的特定系统。

//This is the User group DN
$ldapDN = "cn=User,ou=Profiles,ou=App_DEV,ou=ApplicationRights,O=MyCompany.COM";
$filter = "(uniqueMember=uid=" . $uid . ",ou=Users,O=MYCOMPANY.COM)";
$attr = array('uniqueMember');
$result = ldap_search($ldapConnection, $ldapDN, $filter, $attr):
$entries = ldap_get_entries($ldapConnection, $result);
ldap_unbind($ldapConnection);
return intval($entries["count"]) > 0;

最佳答案

成员身份信息通常存储在组中 - 以“member”或“memberUid”属性的形式。 “member”表示成员对象的完整 DN(专有名称),类似于“uid=username,ou=users,dc=example,dc=com”。对于 memberUid,该值将只是“用户名”。

找出您的目录中正在使用的方法是使用 Apache Directory Studio 之类的东西来分析一个组。 .

除了“member”属性之外,AD 还在用户记录中存储了一个 memberOf 属性,其中包含组的 DN。但是大多数目录不会这样做,这可能就是您的代码无法正常工作的原因。

您正在寻找的是这样的过滤器:

// & means "And" the next sibling items: 
// so "find items that have the objectClass of group and a member whose DN is user_dn
(&(objectClass=group)(member=[user_dn]))

(&(objectClass=group)(memberUid=[user_uid]))

所以在你的情况下

$result = ldap_search(
$ds,
'dc=mycompany,dc=com', // The base from which to start your search. (could be an OU too, like 'ou=restricted,dc=mycompany,dc=com')
'(&(objectClass=group)(member=uid=tom,ou=users,dc=mycompany,dc=com))'
);

或者,如果您的群组按 memberUid,您可以将过滤器更改为

$filter = '(&(objectClass=group)(memberUid=username))';

$result 应该包含以“用户名”作为成员的组记录列表。

关于PHP LDAP : How to search if user is in group?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13487127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com