【问题标题】:is it possible to set permission in zend acl to action level insted of controller level是否可以将 zend acl 中的权限设置为控制器级别的操作级别
【发布时间】:2011-07-15 12:42:55
【问题描述】:

我正在使用 zend 框架,在我的站点中,我有两种类型的用户,访客和登录用户,我有一个名为的控制器。书,里面有 3 个动作。添加、编辑和删除,

在我的 zend acl 中,我只将书籍控制器的权限授予登录用户,在我的导航中,书籍链接不显示给访客,而不是我想向登录用户显示所有 3 个子链接,并且只添加子链接到客人

喜欢这个

给登录用户

  • 书籍

    • 添加

    • 编辑

    • 删除

和客人

  • 书籍

    • 添加

问题是当我在 acl 中设置权限时,书籍链接完全没有显示给客人,

我的 acl 的这一部分

    $this->addResource(new Zend_Acl_Resource('books'));
    $this->addResource(new Zend_Acl_Resource('login'));
    $this->addResource(new Zend_Acl_Resource('logout'));        

    $this->addRole(new Zend_Acl_Role('guest'));
    $this->addRole(new Zend_Acl_Role('user'), 'guest');

    $this->allow('guest', 'login');
$this->allow('user','logout');
    $this->allow('user','books');

$this->deny('guest', 'logout');
$this->deny('user', 'login');   

有什么方法可以将权限设置为操作级别,或者我需要一个插件。 我花了几个小时努力寻找解决方案,但找不到。 请帮助......谢谢:(

更新。

不要被名字迷惑了,这不是默认的zend Acl.php。这是一个自定义的留在我的模型文件夹中

我的navigation.xml 的一部分

<configdata>
    <nav>
        <books>
           <label>Books</label>
           <controller>books</controller>
           <action>index</action>
           <resource>books</resource>
           <pages>
                    <add>
                        <label>Add</label>
                        <controller>books</controller>
                        <action>add</action>
                    </add>
                    <edit>
                        <label>Edit</label>
                        <controller>books</controller>
                        <action>edit</action>
                    </edit>
                    <delete>
                        <label>Delete</label>
                        <controller>books</controller>
                        <action>delete</action>
                    </delete>
          </pages>
       </books>
   </nav>
</configdata>

【问题讨论】:

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


    【解决方案1】:

    如前所述,您必须为资源添加权限。 $this-&gt;allow('role','resource',array('privilege')); 很多人使用controller 作为资源,action 作为权限。

    我假设您将Zend_NavigationZend_Acl 结合使用以向已登录用户显示正确的导航。 books 和它的 pages 没有显示的简单原因是因为您没有授予 guest 查看父 books 的权限。您必须允许guest 访问为books 定义的相同资源和权限。因此,您必须执行以下操作:

    $this->allow('guest', 'books', array('index', 'add')
    

    然后,你可以给user访问权限:

    $this->allow('user', 'books', array('edit','delete')); // index & add are inherited 
    

    现在,在您的Zend_Navigation_Page 中,您必须将资源设置为books,并将权限设置为index

    【讨论】:

    • 我是这样添加的,但是现在书籍链接完全没有显示给访客或登录用户
    • 您能否更新您的问题,说明如何将图书页面添加到导航中?我怀疑你有'resource'=&gt;'books' 和缺少'privilege'='index'
    • 嘿,我添加了我的navigation.xml的一部分。请检查一下
    • &lt;resource&gt;books&lt;/resource&gt; 下添加&lt;privilege&gt;index&lt;/privilege&gt;,应该可以解决问题
    • 是的。这现在有效,但我必须在每个操作下添加资源和权限。非常感谢:D
    【解决方案2】:
    $this->deny($this->editor,'artist',array('delete'));
    

    artist 是资源(控制器),delete 是动作。

    请参阅http://zendguru.wordpress.com/2008/11/05/zend-framework-acl-with-example/ 了解示例。

    和/或http://framework.zend.com/manual/en/zend.acl.refining.html#zend.acl.refining.precise

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-07
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多