我是Zend和LDAP的新手,所以我有真正的堆栈溢出... 我有什么:
我需要什么:
我已经阅读了大量关于Zend_Auth的手册,关于authnz_ldap_module等但无法解决给定的任务。 任何帮助 - 例子,解决方案,链接 - 都将受到高度赞赏!
答案 0 :(得分:1)
AuthType basic AuthName "Secure Login" AuthBasicProvider ldap AuthLDAPURL "ldaps://ldap.example.com/ou=People,dc=exmaple,dc=com?uid?sub".
将它添加到您的目录指令中,这将满足您对ldap auth的需求。但你仍然需要弄清楚如何将新来的访问者重定向到索引,可能是cookie。
答案 1 :(得分:0)
我最近完成了整个ACL流程,并对结果感到满意。这是我实施的内容:
扩展Zend_ACL
并使用其构造函数添加角色(包括继承关系)。
创建一个在引导程序中加载的动作助手。 (你需要尽早加载它,以便你可以利用它的钩子,如preDispatch
)。
编辑要保护的每个控制器的init()
并调用新的ACL帮助程序,传入要应用于此控制器的规则,例如:allow('member', 'edit);
真正的工作是由动作助手完成的。它有四个功能:
init()
- 实例化新的ACL类,然后添加一个反映当前控制器名称的新资源,即。 $this->_resource = $this->getRequest()->getControllerName())
。
preDispatch()
- 使用Zend_Auth
获取当前用户类型(或指定用户未登录的默认guest虚拟机)。检查是否允许使用ACL进行请求,即$this->_acl->isAllowed($currentRole, $resource, $action)
。
注意请求的操作成为ACL权限。
allow()
- 这只是代理到ACL对象上的allow()
函数。它由控制器构造函数调用以在ACL中设置规则。
deny()
- 至于允许。
因此,在运行时,一系列事件如下:
动作助手在引导程序中加载。这a)实例化自定义ACL对象,该对象设置自己的角色,然后b)将当前控制器名称添加为资源。
运行控制器init()
。它调用助手的allow()
和deny()
方法来设置规则。
运行帮助程序preDispatch()
,如果!isAllowed()
,则重定向用户。
我正在反对数据库,但如果您使用LDAP
,则会采用相同的逻辑。 (在这种情况下,Apache的基本身份验证提示是默认挑战吗?如果没有,可能会增加额外的复杂性。)
我从Rob Allen(Zend Framework in Action)以及其他各种来源的书中对此进行了改编。请注意,一些Zend专业人员建议使用基于模型的ACL(而不是控制器操作)。我会在赛道上给出一些想法。
上述方法的一个特别方便的方面是,持续维护ACL规则非常容易。在使用特定控制器时,您可以在ACL
中设置init()
规则。