2013-12-02 3 views
0

У меня возникла проблема с настройкой правильных правил в моем приложении. Следующий мой код ... Я создаю роли, ресурсы и ограничения .. но ... Я ожидаю, что «consul» разрешено перейти в/mymodule, но ему отказано в/mymodule/{add, edit, delete} .. . и поэтому «Operat» происходит всюду, за исключением удаления контроллера MyModule ...Zend Framework 2 ACL - Разрешения на модули Индекс

//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 к «консулу», и если я пытаюсь отлаживать у меня есть следующее (мой код и в комментарии результат):

//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 

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

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

ответ

0

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

В принципе, вам необходимо разрешить определенную привилегию (например, index) и выполнить проверку этой привилегии.

+0

Так что я сделал ... но когда консул идет/mymodule не допускается ... почему? –

+0

или, может быть, я могу изменить свои ссылки, но функция echo $ this-> url ('mymodule', array ('action' => 'index')); печатает «/ mymodule», и поэтому «консул» отправляется в/mymodule и отрицается –

Смежные вопросы