2012-12-11 7 views
5

Ich habe ein Problem mit der Integration BjyAuthorize und Zend Navigation und weiß nicht, wie sie gelöst werden. Ich versuche dies manual und alles funktioniert gut. Aber ich habe erwartet, wenn ich Wachen in bjyauthorize.config definiere und danach, wird es Reflektion zwischen meiner Navigation und Wächterkonfiguration geben (abgelehnte Kontrolleure oder Routen zeigt keine Navigationspunkte an). Mein Problem ist, dass Navigationselemente immer noch angezeigt werden, aber Abschnitte sind korrekt geschützt. Gibt es eine Möglichkeit, Wachen in die Navigation zu reflektieren? Meine Ansicht Helfer config in module.phpZF2 BjyAuthorize mit Zend integrieren Navigation

Meine Anwendung/module.php View Helfer Konfiguration:

'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__); 
      } 

Meine Wache Konfiguration in bjyauthorize.global.php

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

und meine Navigation. global.php

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

Ich versuche, Routen confi zu ändern guration zu Modul/Controller/Action und funktioniert immer noch nicht.

Antwort

5

Sie haben die Ressource in Ihrer Navigationskonfiguration nicht angegeben. Vergewissern Sie sich auch, wenn $ Rolle Spiele bjyauthorize-Identität

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

Die angegebene Ressource muss der Hut Konfiguration entsprechen:

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

Vielen Dank für den Rat, Sie haben Recht. Problem war in Ich spezifiziere Ressource nicht. – user1893983

0

Können Sie ein Anwendungsbeispiel für die Verwendung von Schutz \ Strecke Post statt Controller angeschlossen werden? Mein Beispiel Route für diesen Fall:

'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

Um jemand zu helfen, dass diese mit BjyAuthorize \ Schutz \ Strecke versucht ...

Sie müssen Ihre Routennamen voran mit route/ und verwenden, die für die Ressourcenwert.

Wenn Ihre Konfiguration einen Wächter so hat ...

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

Sie so etwas für Ihre Navigation, indem diese

'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', 
       ), 
      ), 
     ), 
    ), 
), 

Sie können einstellen, die Standard-ACL und Rolle definieren würde in Ihre onBootstrap Methode Ihres Moduls.

$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); 

Ich hoffe, dass dies jemand da draußen hilft.

+0

Hallo, das funktioniert ganz gut. Aber wie überprüfen Sie, ob ein Benutzer authentifiziert ist oder nicht? Die Methode hasIdentity() existiert nicht ... – cwhisperer

+0

@cwhisperer BjyAuthorize ist für [authorization not authentication] (http://stackoverflow.com/questions/6556522/authentication-versus-authorization). Das [ZfcUser-Modul] (https://github.com/ZF-Commons/ZfcUser) verwendet "Zend \ Authentication \ AuthenticationService" mit der Methode 'hasIdentity()', nach der Sie suchen. – moranjk

+0

Sie haben recht, thx ... Noch eine Frage in diesem Zusammenhang: In einer View kann ich $ this-> isAllowed ('route/xyz') verwenden, wie benutze ich den Helper isAllowed() in einem View Helper? – cwhisperer

0

Als Griesi erwähnt, müssen Sie nur die Ressource in Ihrer Navigationskonfiguration angeben.

In seinem Beispiel erklärte er diesen Controller & Aktion als Ressource

Controller/cebEvent.registrationController: add

Ich möchte nur hinzufügen, dass diese Version funktioniert auch (in diesem Fall ohne Einwirkung)

'Ressource' => 'Controller/Spiel \ Controllers \ Liste'

Vielleicht ist es hilfreich für jemanden. Ich dachte, das wird nie funktionieren, weil es so schrecklich falsch aussieht;)