3

我正在使用Zend_Navigation并尝试将其与Zend_Acl. 导航中的每个页面都有一个privilege属性。我无法确定的是如何为单个页面定义多个权限。

用例:用于管理用户的页面。add如果当前登录用户的角色对资源具有、editdelete权限,我想显示该页面(在导航中)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;
}
4

3 回答 3

2

我意识到我的问题是我缺乏“查看”类型的权限。当我加载资源权限时,如果用户对该资源具有任何权限,我现在授予该资源的“管理员”权限。然后我在页面上使用“管理员”权限。

<admin_users>
    <label>Users</label>
    <route>default</route>
    <controller>admin</controller>
    <action>users</action>
    <resource>Users</resource>
    <privilege>admin</privilege>
</admin_users>
于 2010-04-30T17:05:09.750 回答
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>
于 2010-04-29T13:51:39.217 回答
-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>

于 2010-03-16T06:09:34.717 回答