我想达到的目标:Zend公司的Ldap允许只有当用户有一定的组
- 有两个不同的组
- 管理
- 只读
我希望能够到验证用户并根据他所属的组分配角色。
我已经试过什么:
官方给出的文档,我设置了两个“服务器”不同的组选项来验证:
ldap.admin.host = myhost
ldap.admin.port = myport
ldap.admin.useStartTls = true
ldap.admin.useSsl = true
ldap.admin.username = "cn=ama,ou=LDAPAuth,dc=mydc,dc=de"
ldap.admin.password = "mypass"
ldap.admin.accountFilterFormat = "cn=%s"
ldap.admin.baseDn = "dc=mydc,dc=de"
ldap.admin.bindRequiresDn = true
ldap.admin.group = "ama"
ldap.admin.groupDn = "cn=ama,ou=groups,dc=mydc,dc=de"
ldap.admin.groupAttr = "cn"
ldap.admin.groupFilter = "objectClass=groupOfNames"
ldap.admin.memberAttr = "member"
ldap.readonly.host = myhost
ldap.readonly.port = myport
ldap.readonly.useStartTls = true
ldap.readonly.useSsl = true
ldap.readonly.username = "cn=ama,ou=LDAPAuth,dc=mydc,dc=de"
ldap.readonly.password = "mypass"
ldap.readonly.accountFilterFormat = "cn=%s"
ldap.readonly.baseDn = "dc=mydc,dc=de"
ldap.readonly.bindRequiresDn = true
ldap.readonly.group = "ama_ro"
ldap.readonly.groupDn = "cn=ama_ro,ou=groups,dc=mydc,dc=de"
ldap.readonly.groupAttr = "cn"
ldap.readonly.groupFilter = "objectClass=groupOfNames"
ldap.readonly.memberAttr = "member"
现在官方文档说,如果针对第一台服务器的身份验证失败,它将尝试对第二台服务器执行此操作。但是,这似乎并不是我的身份验证脚本的情况。
我得到了三个测试账户,一个没有组,两个与他们每个人。如果我仅使用其中一个选项,则它适用于应该使用的用户,所有其他人都可以根据需要拒绝访问权限。
但我似乎无法实施“流体检查”。此外:即使'流体检查'可行,但我并不真正了解我将如何发现,对用户能够认证哪一组。
据我了解,我需要手动查询服务器后,我得到一个积极的身份验证读取用户组 - 这是正确的吗?如果是这样,我已经在这里找到本网站上的以下问题:Query all groups of a user using Zend_Ldap 但似乎不是为我工作,因为我只得到空数组或错误,这取决于我尝试:(
我现在能够以一种非常丑陋的方式解决这个问题..我首先检查管理组,如果我得到错误的组认证失败,我实例化一个全新的身份验证实例和查询反对只读组... 然而,这是超级丑陋的,使它与超过两个组合使用会导致一个非常非常非常丑陋的代码 - 只需通过身份验证适配器就可以对ldap进行身份验证,以找出用户身份验证的组反对:S – Sam