Возможно ли установить разрешение в Zend ACL для уровня действия, установленного на уровне контроллера - PullRequest
2 голосов
/ 15 июля 2011

Я использую Zend Framework, на моем сайте у меня есть два типа пользователей: guest и loggeduser, у меня называется контроллер.книги, там у меня есть 3 действия.добавьте, отредактируйте и удалите,

в моем zend acl. Я даю разрешения контроллеру книг только зарегистрированному пользователю, в моей навигации ссылка на книги не отображается гостю, вместо этого я хочу показать все 3вложенные ссылки для зарегистрированного пользователя и, только добавьте дополнительную ссылку для гостя

как это

для зарегистрированного пользователя

  • books

    • добавить

    • изменить

    • удалить

идля гостя

  • книги

    • добавить

проблема заключается в том, когда я устанавливаю разрешения в 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. это пользовательский, остается в папке с моими моделями

часть моей навигации.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 ]

3 голосов
/ 15 июля 2011

Как уже отмечалось, вам нужно будет добавить привилегии к ресурсу. $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 голос
/ 15 июля 2011
$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

...