Zend Framework 2 ACL - индекс разрешений для модулей

У меня проблема с настройкой правильных правил в моем приложении. Ниже приведен мой код... Я создаю роли, ресурсы и ограничения... но... Я ожидаю, что консулу разрешено переходить в /mymodule, но он запрещен /mymodule/{add,edit,delete}.. и так 'действие' происходит везде, кроме удаления контроллера mymodule...

//creating roles
$guest  = new GenericRole('guest');
$consul = new GenericRole('consul');
$operat = new GenericRole('operat');
$admin  = new GenericRole('admin');

//adding roles
$acl -> addRole($guest);
$acl -> addRole($consul,'guest');
$acl -> addRole($operat,'consul');
$acl -> addRole($admin,'operat');

//adding resources
$acl -> addResource(new GenericResource('home'));
$acl -> addResource(new GenericResource('application'));
$acl -> addResource(new GenericResource('auth'));
$acl -> addResource(new GenericResource('mymodule'));

//adding restrictions
$acl -> allow('guest', 'home');
$acl -> allow('guest', 'application');
$acl -> allow('guest', 'auth');
$acl ->  deny('guest', 'mymodule');
$acl -> allow('consul','mymodule');
$acl -> allow('operat','mymodule','index');
$acl ->  deny('consul','mymodule','add');
$acl ->  deny('consul','mymodule','edit');
$acl ->  deny('consul','mymodule','delete');
$acl -> allow('operat','mymodule');
$acl ->  deny('operat','mymodule','delete');
$acl -> allow('admin');

вместо желаемого поведения zf2 не разрешает просматривать /mymodule для 'consul', и если я пытаюсь отладить, у меня есть следующее (мой код и в комментарии результат):

//some tests 
echo $acl->isAllowed('guest', 'mymodule') ? 'allowed' : 'denied';               // denied
echo $acl->isAllowed('guest', 'mymodule','index') ? 'allowed' : 'denied';       // denied
echo $acl->isAllowed('guest', 'mymodule','add') ? 'allowed' : 'denied';         // denied
echo $acl->isAllowed('consul','mymodule') ? 'allowed' : 'denied';               // denied
echo $acl->isAllowed('consul','mymodule','index') ? 'allowed' : 'denied';       // allowed
echo $acl->isAllowed('consul','mymodule','default') ? 'allowed' : 'denied';     // allowed
echo $acl->isAllowed('consul','mymodule','add') ? 'allowed' : 'denied';         // denied
echo $acl->isAllowed('consul','mymodule','edit') ? 'allowed' : 'denied';        // denied
echo $acl->isAllowed('operat','mymodule') ? 'allowed' : 'denied';               // denied
echo $acl->isAllowed('operat','mymodule','index') ? 'allowed' : 'denied';       // allowed
echo $acl->isAllowed('operat','mymodule','default') ? 'allowed' : 'denied';     // allowed
echo $acl->isAllowed('operat','mymodule','add') ? 'allowed' : 'denied';         // allowed
echo $acl->isAllowed('operat','mymodule','edit') ? 'allowed' : 'denied';        // allowed
echo $acl->isAllowed('operat','mymodule','delete') ? 'allowed' : 'denied';      // denied
echo $acl->isAllowed('admin','mymodule') ? 'allowed' : 'denied';                // allowed
echo $acl->isAllowed('admin','mymodule','index') ? 'allowed' : 'denied';        // allowed
echo $acl->isAllowed('admin','mymodule','default') ? 'allowed' : 'denied';      // allowed
echo $acl->isAllowed('admin','mymodule','add') ? 'allowed' : 'denied';          // allowed
echo $acl->isAllowed('admin','mymodule','edit') ? 'allowed' : 'denied';         // allowed
echo $acl->isAllowed('admin','mymodule','delete') ? 'allowed' : 'denied';       // allowed

кто может помочь мне понять это странное поведение? где моя вина?

заранее спасибо

1 ответ

Решение

Если вы отрицаете некоторые привилегии consul роль на ресурсе, он не будет рассматриваться как имеющий все привилегии на этом ресурсе (что вы и просите, когда делаете $acl->isAllowed('consul', 'mymodule')).

По сути, вам нужно разрешить определенную привилегию (index например) и проверьте свою привилегию.

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