我正在使用Zend_Navigation
并尝试将其与Zend_Acl
集成。导航中的每个页面都有privilege
属性。我无法确定的是如何为单个页面定义多个权限。
用例:用于管理用户的页面。如果当前登录的用户角色在add
资源上拥有edit
,delete
或Users
权限,我想显示该页面(在导航中)。
导航XML中的示例条目:
<admin_users>
<label>Users</label>
<route>default</route>
<controller>admin</controller>
<action>users</action>
<resource>Users</resource>
<privilege>add,edit,delete</privilege>
</admin_users>
使用上面以逗号分隔的列表不会产生所需的行为。
更新
在深入研究代码之后,我发现Zend_Navigation_Page
只允许单个字符串值。有没有人扩展这个课程或找到另一种解决这个限制的方法?
/**
* Sets ACL privilege associated with this page
*
* @param string|null $privilege [optional] ACL privilege to associate
* with this page. Default is null, which
* sets no privilege.
* @return Zend_Navigation_Page fluent interface, returns self
*/
public function setPrivilege($privilege = null)
{
$this->_privilege = is_string($privilege) ? $privilege : null;
return $this;
}
答案 0 :(得分:2)
我意识到我的问题是我缺乏“查看”类型权限。当我加载资源权限时,如果用户具有该资源的任何权限,我现在授予资源“admin”权限。然后我在页面上使用'admin'权限。
<admin_users>
<label>Users</label>
<route>default</route>
<controller>admin</controller>
<action>users</action>
<resource>Users</resource>
<privilege>admin</privilege>
</admin_users>
答案 1 :(得分:0)
将数据权限作为数组传递可能需要某种嵌套:
<admin_users>
<label>Users</label>
<route>default</route>
<controller>admin</controller>
<action>users</action>
<resource>Users</resource>
<privilege>
<add>add</add>
<edit>edit</edit>
</privilege>
</admin_users>
编辑:
常识告诉一个链接应该指向一个动作。您可以在菜单中添加<params>
个节点。
<admin_users_edit>
<label>Users edit</label>
<route>default</route>
<controller>admin</controller>
<action>users</action>
<resource>Users</resource>
<params>
<do>edit</do>
</params>
<privilege>
<edit>edit</edit>
</privilege>
</admin_users_edit>
<admin_users_delete>
<label>Users delete</label>
<route>default</route>
<controller>admin</controller>
<action>users</action>
<resource>Users</resource>
<params>
<do>delete</do>
</params>
<privilege>
<edit>delete</edit>
</privilege>
</admin_users_delete>
答案 2 :(得分:-2)
您是否尝试过以下操作?我不确定它是否会起作用,但我有一种感觉。
<admin_users>
<label>Users</label>
<route>default</route>
<controller>admin</controller>
<action>users</action>
<resource>Users</resource>
<privilege>add</privilege>
<privilege>edit</privilege>
<privilege>delete</privilege>