【问题标题】:Giving Zend Navigation Pages Multiple ACL Privileges赋予 Zend 导航页面多个 ACL 权限
【发布时间】:2010-03-15 16:49:58
【问题描述】:

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

用例:用于管理用户的页面。如果当前登录用户的角色在Users 资源上具有addeditdelete 权限,我想显示该页面(在导航中)。

导航 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;
}

【问题讨论】:

    标签: php zend-framework zend-navigation zend-acl


    【解决方案1】:

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

    <admin_users>
        <label>Users</label>
        <route>default</route>
        <controller>admin</controller>
        <action>users</action>
        <resource>Users</resource>
        <privilege>admin</privilege>
    </admin_users>
    

    【讨论】:

      【解决方案2】:

      可能需要某种嵌套来将权限作为数组传递:

      <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>
      

      编辑:

      常识告诉我们一个链接应该指向一个动作。您可以在菜单中添加&lt;params&gt; 节点。

      <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>
      

      【讨论】:

      • 我挖掘了代码,发现Zend_Navigation_Page 只允许单个字符串值。我正在更新我的帖子以反映这一点。
      • 我不确定我是否理解您在此处显示的内容。我的具体案例是显示记录的列表页面。如果当前用户可以添加、编辑或删除,他们应该能够看到该页面,否则不能。
      【解决方案3】:

      您是否尝试过以下方法?我不确定它是否会起作用,但我有一种感觉。

      <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>
      

      【讨论】:

      • 我试过了,但它不起作用,即使用户拥有该资源的所有权限。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      相关资源
      最近更新 更多