Возможно ли установить разрешение в Zend ACL для уровня действия, установленного на уровне контроллера
Я использую Zend Framework, на моем сайте у меня есть два типа пользователей, гостя и loggeduser, у меня есть контроллер называется. книги, там у меня есть 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>
2 ответа
Как уже отмечалось, вам нужно будет добавить привилегии к ресурсу. $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'));
где Artist - это ресурс (контроллер), а delete - действие.
см. пример http://zendguru.wordpress.com/2008/11/05/zend-framework-acl-with-example/.
и / или http://framework.zend.com/manual/en/zend.acl.refining.html