我正在使用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_Navigation
与Zend_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