是否可以在 ZEND ACL 中将权限设置为操作级别而不是控制器级别



我正在使用Zend框架,在我的站点中我有两种类型的用户,guest和loggeduser,我有一个叫做的控制器。 书,里面我有3个动作。 添加、编辑和删除,

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

喜欢这个

到登录的用户

    • 编辑

    • 删除

和客人

问题是我在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 . 这是一个自定义的,保留在我的模型文件夹中

我导航的一部分.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')); 许多人使用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 .

$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

相关内容

最新更新