Отказ в доступе к действию с Zend ACL приводит к исчезновению навигационной ссылки - PullRequest
1 голос
/ 03 июня 2010

У меня есть контроллер расписания с четырьмя действиями:

class ScheduleController extends Zend_Controller_Action {

    public function indexAction(){ ... }

    public function viewAction(){ ... }

    public function addAction(){ ... }

    public function deleteAction(){ ... }

}

Итак, я настроил Zend_Navigation с таким массивом:

array(

    ...other links here...

    array(
        'controller'=> 'schedule',
        'action' => 'index',
        'label' => 'Schedule',
        'resource' => 'schedule',
        'privilege' => 'index',
        'privilege' => 'view',      
        'privilege' => 'add',
        'privilege' => 'edit',
    )
);

И я также создал две группы в ACL: пользователи и администраторы. Я хочу настроить его так, чтобы пользователи могли получить доступ к «индексу» и «представлению», а администраторам - ко всему. Итак, я начал с этого:

class My_AccessControlList extends Zend_Acl {
    $this->addRole(new Zend_Acl_Role('user'));
    $this->addRole(new Zend_Acl_Role('admin'), 'user');
    ...
    $this->addResource(new Zend_Acl_Resource('schedule'));
    $this->deny();
    ...

Теперь кажется, что если я не добавлю эту строку:

    $this->allow('user', 'schedule');

ссылка не будет отображаться в навигации. Тогда, если я добавлю это:

    $this->deny('user', 'schedule', 'add');

пользователи заблокированы от действия добавления, пока все хорошо. Но если я тогда добавлю:

    $this->deny('user', 'schedule', 'edit');
    --or change it to this--
    $this->deny('user', 'schedule', array('add', 'edit'));

пользователи блокируются надлежащим образом, но ссылка исчезает из объекта навигации. Кто-нибудь знает, что я делаю не так? Спасибо.

1 Ответ

1 голос
/ 08 мая 2011
array(
    'controller'=> 'schedule',
    'action' => 'index',
    'label' => 'Schedule',
    'resource' => 'schedule',
    'privilege' => 'index',
    'privilege' => 'view',      
    'privilege' => 'add',
    'privilege' => 'edit',
)

... вы перезаписываете ключ привилегий три раза, что приводит к массиву с ключом привилегий, содержащему последнее значение edit. Ключ привилегий должен содержать массив из четырех значений

...