我正在开发一个基于ZF2的网站。无论访问者/用户状态如何,我的主导航都保持不变。需要添加另一个组件/ nav,这取决于用户的状态和角色。对于访问者的项目将Zend导航和RBAC
- 注册
- 登录
- EN(实际上是一个下拉,与其他可用的语言)
对于登录的普通用户,它会显示
- 资料
- 注销
- EN(语言选择如上所述)
而对于一些用户具有特定角色/权限将有更多的项目
我想用RBAC,作为ACL显得臃肿,而且也只是为了检查如果当前登录的用户/角色有其他项目,我需要加载完整的ACL(并且我们有大约15种以上不同类型的角色)。
我花了一些时间思考如何实现这一点,所以下面是我的一些想法。
- 我创建一个空的导航容器,并创建一个工厂。在工厂中,我访问身份验证和RBAC并根据用户的状态/角色添加页面。
- 我使用所有可能的页面创建一个完全加载的导航,然后在工厂中使用身份验证和RBAC隐藏我不想显示的页面。
rd选项是使用一个视图助手,它将通过ServiceLayer获取RBAC并生成导航。 (如在ZF2 how to display tweets in layout和ZF2 : Add a Login widget in the template讨论。
- 或者我可以创建在module.php一个控制器插件或只是一个方法,并听取了MVC_Render或MVC_Dispatch事件并产生所希望的导航和输出添加到视图可变。
PS:我需要使用的部分,因为我需要一些CSS类添加到语言选择部分同样的导航将显示在布局中。
非常感谢您的回答,作品像一个魅力。请你澄清一下$ moduleRouteListener-> attach($ eventManager);我们为什么需要这个? – write2art
我试过你的解决方案@Mohammad,但我得到以下错误:严格的标准:call_user_func()期望参数1是一个有效的回调,非静态方法Application \ Listener \ RbacListener :: accept()不应被静态调用/ home /.../ zendframework/library/Zend/EventManager/EventManager.php在第468行 - 当前版本有所变化吗? – webDEVILopers
这是关于@Mohammed ZeinEddin与最新版本的ZF2和ZfcRbac一起使用的相同尝试的简短教程:http://blog.webdevilopers.net/?p=9 – webDEVILopers