2012-12-11 8 views
5

Mam problem z integracją BjyAuthorize i Zend nawigacji i nie wiem jak je rozwiązać. Próbuję tego manual i wszystko działa dobrze. Ale spodziewałem się, że zdefiniuję ochronę w bjyauthorize.config, a potem nastąpi odbicie pomiędzy moją nawigacją i konfiguracją strażnika (odmowa kontrolerów lub tras nie wyświetla elementów nawigacyjnych). Mój problem polega na tym, że elementy nawigacyjne są nadal wyświetlane, ale sekcje są poprawnie chronione. Czy jest jakiś sposób, w jaki sposób odzwierciedlić strażników w nawigacji? Mój pogląd pomocnik config w Module.phpZF2 Integrowanie BjyAuthorize z Zend Navigation

mojej konfiguracji widoku pomocnika Application/Module.php:

'mainMenu' => function($sm){ 
       $nav = $sm->get('navigation')->menu(); 
       $serviceLocator = $sm->getServiceLocator(); 
       $acl = $serviceLocator->get('BjyAuthorize\Service\Authorize')->getAcl(); 
       $role = $serviceLocator->get('BjyAuthorize\Service\Authorize')->getIdentity(); 
       $nav->setAcl($acl); 
       $nav->setRole($role); // Todo replace 
       $nav->setUseAcl(); 
       return $nav->setUlClass('nav')->setTranslatorTextDomain(__NAMESPACE__); 
      } 

Moja konfiguracja strażnik w bjyauthorize.global.php

'guards' => array(
    'BjyAuthorize\Guard\Controller' => array(
     array('controller' => 'Article\Controller\Article', 'roles' => array('user')), 
), 

And My nawigacyjnego. global.php

return array(
    'navigation' => array(
     'default' => array(
      'articles' => array(
       'label' => 'Articles', 
       'route' => 'articles', 
      ), 
     ), 
    )); 

Próbuję zmienić trasę confi do modułu/kontrolera/akcji i nadal nie działa.

Odpowiedz

5

Nie określono zasobu w konfiguracji nawigacji. Należy również upewnić się, czy $ rola pasuje bjyauthorize-tożsamość

'navigation' => array(
    'default' => array(
    array(
     'label' => 'Registration', 
    'resource' => 'controller/cebEvent.registrationController:add', 
    'route' => 'registration/add', 
    ), 
), 
), 

Określony zasób musi dopasować konfigurację Strażnik:

'guards' => array(
    'BjyAuthorize\Guard\Controller' => array(
     array('controller' => 'cebEvent.registrationController','action' => 'add', 'roles' => array('guest','registration_manage')), 
    ), 
), 
+0

Dziękuję za poradę, masz rację. Problem polegał na tym, że nie określam zasobu. – user1893983

0

można zaksięgować przykład użycia za korzystanie Straży \ Route zamiast kontrolera? Mój przykład trasa w tym przypadku:

'guards' => array(
    'BjyAuthorize\Guard\Route' => array(
     array('route' => 'zfcadmin/sap-targetvalue/index', 'roles' => array('guest', 'user')), 
     array('route' => 'zfcadmin/sap-targetvalue/create', 'roles' => array('user')), 
    ) 
); 
6

pomóc każdemu, kto próbuje to przy użyciu BjyAuthorize \ \ Straży Route ...

Musisz poprzedzić nazwę trasy z route/ i użyć jej dla wartość zasobu.

Jeśli config ma takiego strażnika ...

'guards' => array(
    'BjyAuthorize\Guard\Route' => array(
     array('route' => 'zfcadmin/zfcuseradmin/list', 'roles' => array('admin')), 
    ) 
); 

byłoby zdefiniować coś takiego do nawigacji

'navigation' => array(
    'default' => array(
     'admin' => array(
      'label' => 'Admin', 
      'route' => 'zfcadmin', 
      'pages' => array(
       'users' => array(
        'resource' => 'route/zfcadmin/zfcuseradmin/list', // route resource ;) 
        'label' => 'Users', 
        'route' => 'zfcadmin/zfcuseradmin/list', 
       ), 
      ), 
     ), 
    ), 
), 

Można ustawić domyślny ACL i rola poprzez umieszczenie tego w metoda onBootstrap twojego modułu.

$sm = $e->getApplication()->getServiceManager(); 
$auth = $sm->get('BjyAuthorize\Service\Authorize'); 

$acl = $auth->getAcl(); 
$role = $auth->getIdentity(); 
\Zend\View\Helper\Navigation::setDefaultAcl($acl); 
\Zend\View\Helper\Navigation::setDefaultRole($role); 

Mam nadzieję, że to pomoże komuś tam.

+0

Witam, to działa całkiem nieźle. Ale jak sprawdzić, czy użytkownik jest uwierzytelniony, czy nie? Metoda hasIdentity() nie istnieje ... – cwhisperer

+0

@cwhisperer BjyAuthorize jest dla [autoryzacja NIE autoryzacja] (http://stackoverflow.com/questions/6556522/authentication-versus-authorization). [Moduł ZfcUser] (https://github.com/ZF-Commons/ZfcUser) używa 'Zend \ Authentication \ AuthenticationService', który ma szukaną metodę' hasIdentity() '. – moranjk

+0

Masz rację, thx ... Jeszcze jedno pytanie w tym kontekście: W widoku mogę użyć $ this-> isAllowed ('route/xyz'), w jaki sposób użyć helpera isAllowed() w widoku Helper? – cwhisperer

0

Jak wspomniał Griesi, wystarczy podać zasób w konfiguracji nawigacji.

W swoim przykładzie stwierdził ten kontroler & działania jako zasób

kontroler/cebEvent.registrationController: dodaj

Chcę tylko dodać, że ta wersja działa również (w tym przypadku bez działania)

'resource' => 'kontroler/Gry \ Controller \ Lista'

Może jest to pomocne dla kogoś. Myślałem, że to nigdy nie zadziała, ponieważ wygląda tak okropnie źle;)

Powiązane problemy