PHP LDAP:如何搜索用户是否在组中?
发布时间:2020-12-13 18:07:27 所属栏目:PHP教程 来源:网络整理
导读:如何使用php_ldap模块检查用户是否属于组? 我是ldap的新手,因此有点困惑…… 通过谷歌搜索到目前为止我已经想出了这个: $ds=ldap_connect($ldapHost,$ldapPort);if ($ds) { $r=ldap_bind($ds,$ldapRdn,$ldapPassword); $filter = "(sAMAccountName=" . $ui
如何使用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. cn=User,ou=Profiles,ou=App_DEV,ou=ApplicationRights,O=MyCompany.COM 我该怎么做这个检查? 编辑: 这是我在“接受的答案”和试用版的帮助下找到的解决方案.错误“.我认为答案在很大程度上取决于您的具体系统. //This is the User group DN $ldapDN = "cn=User,O=MyCompany.COM"; $filter = "(uniqueMember=uid=" . $uid . ",ou=Users,O=MYCOMPANY.COM)"; $attr = array('uniqueMember'); $result = ldap_search($ldapConnection,$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,值只是’username’.
找出目录中使用的方法的方法是使用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=com))' ); 或者,如果您的组通过memberUid,您可以将过滤器更改为 $filter = '(&(objectClass=group)(member=username))'; 然后$result应该包含一个以’username’作为成员的组记录列表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |