Zend ACL запрещает родительские роли только из ресурсов дочерних ролей - PullRequest
1 голос
/ 23 февраля 2012

Я пытаюсь реализовать ACL в Zend Framework. Я хочу, чтобы родительские роли имели доступ ко всем ресурсам, кроме ресурсов, разрешенных для дочерних ролей. У меня есть следующий код:

$acl = new Zend_Acl();
$acl->addRole('visitor')
    ->addRole('subscriber', 'visitor')
    ->addRole('editor', 'subscriber')
    ->addRole('admin', 'editor')
    ->addRole('superadmin', 'admin')
    ->allow();

$acl->addResource('index')
    ->addResource('blog')
    ->addResource('users')
    ->addResource('admin');

acl->allow('subscriber', 'blog', 'index')
    ->allow('editor', 'blog', array('add', 'edit'))
    ->allow('admin', 'admin')
    ->allow('superadmin', 'users');

Я хочу, чтобы «посетитель» имел доступ к всем ресурсам , кроме , к ресурсам, разрешенным для дочерних ролей subscriber, editor, admin, superadmin. То же самое для всех других ролей и ресурсов. «Посетитель» будет иметь доступ ко всем ресурсам, но не к ресурсам, разрешенным для дочерних ролей.

Ответы [ 2 ]

1 голос
/ 19 июня 2012

Я также работаю с Zend_Acl и думаю, что понял, что вы имеете в виду.«Проблема» заключается в том, что по умолчанию Zend запрещает доступ к каждому ресурсу, в то время как вы не указываете, что у некоторых пользователей есть права на доступ к нужному ресурсу.

Это означает, что когда вы создаете свой ACL (ролей, ресурсов, разрешений), вы должны сообщить, что хотите дать Посетителю доступ к каждому ресурсу, к которому он может получить доступ.

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

0 голосов
/ 23 февраля 2012

«подписчик» не является родителем «посетителя», но на самом деле является дочерним . Поэтому подписчик наследует все ресурсы и привилегии посетителя. Вы на самом деле не задавали никаких вопросов, но похоже, что вам нужно ожидаемое поведение Zend_Acl.

$acl = new Zend_Acl();
$acl->addRole('visitor')
->addRole('subscriber', 'visitor')
->addRole('editor', 'subscriber')
->addRole('admin', 'editor')
->addRole('superadmin', 'admin');

$acl->addResource('index')
->addResource('blog')
->addResource('users')
->addResource('admin');

$acl->allow('subscriber', 'blog', 'index')
->allow('editor', 'blog', array('add', 'edit'))
->allow('admin', 'admin')
->allow('superadmin', 'users');

добавление $acl->allow('visitor', 'index', 'index'), посетитель теперь имеет доступ к странице index , а его дочерние элементы также имеют доступ к странице индекса. Но посетитель не имеет доступа к ресурсу blog и привилегии index , только подписчик и его дочерние элементы имеют доступ к этой странице .

Вы должны прочитать документацию Zend_Acl , есть много хороших примеров.

...