Возможно ли установить разрешение в 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

Другие вопросы по тегам