2

我正在使用 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>
4

2 回答 2

3

如前所述,您必须为资源添加权限。$this->allow('role','resource',array('privilege'));许多人将其controller用作资源和action特权。

我假设您正在Zend_Navigation结合使用Zend_Acl来显示正确的导航以登录用户。books没有显示它的简单原因pages是因为您没有guest授予查看 parent 的权限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.

于 2011-07-15T14:26:42.063 回答
1
$this->deny($this->editor,'artist',array('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

于 2011-07-15T12:50:24.370 回答