我正在使用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。这是一个自定义保留在我的模型文件夹
我的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>
答案 0 :(得分:3)
如前所述,您必须为资源添加权限。 $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
。
答案 1 :(得分:1)
$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