答案 0 :(得分:0)
我认为Zend_Navigation使用ACL来确定页面是否应该在渲染时间内以可见 。将ACL对象传递给它时,它不会改变您的导航对象。
如果要创建由ACL减少的自定义导航容器,则需要一种不同的方法 - 可能会扩展Zend Navigation类并添加适当的方法。
答案 1 :(得分:0)
您需要强制Zend_Navigation重新渲染导航。如前所述,它基于acl“过滤”渲染。此外,不确定如何在Zend_Registry中存储该角色,但您可能需要考虑在查询Zend_Auth以对用户进行身份验证时返回该角色,如果该角色未更新,则还可能导致问题。我还建议在动作助手中设置你的acl等而不是动作,以便它可以处理“任何”动作而不仅仅是这个动作。项目存在的事实应该表明由于某种原因没有重新呈现菜单,或者更新的角色没有被传递给Acl,如果菜单项根本不存在于菜单中。 Zend_Navigation不会呈现任何已被acl过滤的项目,它不仅仅是将项目设置为不可见。
此外,什么角色定义了显示登录选项卡的权限?如果您的角色是从一个普通用户角色继承的,那么您应该告诉acl拒绝该标准用户,如果没有,那么它确实可以正常工作。举个例子:
//..//..//
$this->addResource(new Zend_Acl_Resource('login')); //<- Allows the hiding of the login navigation tab
$this->addResource(new Zend_Acl_Resource('logout')); //<- Allows the hiding of the logout navigation tab
$this->allow($guest, array('user'), array('user.login', 'user.register'));
$this->allow('user', array('user', 'useraccount'), array('user.view', 'user.logout', 'user.account-editown', 'user.edit-account', //<-end user privs
));
//..//..//
$this->deny('user', array('user'), array('user.login', 'user.register'));