Zend framework 是否可以将zend acl中的权限设置为操作级别而不是控制器级别

Zend framework 是否可以将zend acl中的权限设置为操作级别而不是控制器级别,zend-framework,zend-navigation,zend-acl,php,Zend Framework,Zend Navigation,Zend Acl,Php,我使用的是zend框架,在我的站点中,我有两种类型的用户,guest和loggeduser,我有一个名为。书,在那里我有三个动作。添加、编辑和删除 在我的zend acl中,我只向登录用户授予books controller的权限,在我的导航中,books链接不显示给guest,而不是向登录用户显示所有3个子链接,并且只向guest添加子链接 像这样 发送给登录用户 书 加 编辑 删除 客人呢 书 加 问题是当我在acl中设置权限时,books链接完全没有显示给guest 这是我

我使用的是zend框架,在我的站点中,我有两种类型的用户,guest和loggeduser,我有一个名为。书,在那里我有三个动作。添加、编辑和删除

在我的zend acl中,我只向登录用户授予books controller的权限,在我的导航中,books链接不显示给guest,而不是向登录用户显示所有3个子链接,并且只向guest添加子链接

像这样

发送给登录用户

    • 编辑

    • 删除

客人呢

问题是当我在acl中设置权限时,books链接完全没有显示给guest

这是我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。这是一个自定义的,保存在我的models文件夹中

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

书
书
指数
书
添加
书
添加
编辑
书
编辑
删除
书
删除
其中,艺术家是资源(控制器),删除是操作

有关示例,请参见


和/或

如前所述,您必须向资源添加权限。
$this->allow('role','resource',array('privilege');
许多人将
控制器
用作资源,将
操作
用作权限

我假设您正在使用
Zend_Navigation
Zend_Acl
来向已登录的用户显示正确的导航。
books
及其
页面
不显示的原因很简单,因为您没有授予
guest
查看家长
books
的权限。您必须允许
guest
访问为
书籍定义的相同资源和权限。因此,您必须执行以下操作:

$this->allow('guest', 'books', array('index', 'add')
然后,您可以给
用户
访问权限:

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

现在,在您的
Zend_Navigation\u页面中
您必须将资源设置为
books
,并将权限设置为
索引

我就是这样添加的,但是现在books链接完全没有显示给任何一个用户、来宾或登录用户。您可以更新您的问题,说明如何将books页面添加到导航中吗?我怀疑你有
'resource'=>'books'
并且缺少
'privilege'='index'
我添加了我的navigation.xml的一部分。请检查
books
下的itAdd
index
,这应该会做些小动作。现在可以了,但我必须在每个动作下添加资源和特权。谢谢:D
$this->allow('user', 'books', array('edit','delete')); // index & add are inherited