2012-12-11 15 views
5

統合BjyAuthorizeとZendナビゲーションに問題があり、解決方法がわかりません。私はこれを試してmanualとすべてうまく動作します。しかし、私はbjyauthorize.configでガードを定義した後、ナビゲーションとガードの設定が反映されることを期待しています(拒否されたコントローラやルートはナビゲーション項目を表示しません)。私の問題は、ナビゲーションアイテムはまだ表示されているが、セクションは正しく保護されているということです。ガードをナビゲーションに反映させる方法はありますか? Module.phpZF2 Zend NavigationとBjyAuthorizeの統合

マイビューヘルパーの設定マイアプリケーション/ Module.phpビューヘルパーの設定:bjyauthorize.global.php

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

そして私のナビゲーションで

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

私のガードの設定。 global.php

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

私は経路を変更しようとしていますconfiモジュール/コントローラー/アクションへの継続時間はまだ有効ではありません。

答えて

5

ナビゲーション設定内でリソースを指定しませんでした。また、指定されたリソースがあなたのガードの設定と一致している必要があり

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

$の役割がbjyauthorize-アイデンティティと一致した場合に確認してください。

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

アドバイスをいただきありがとうございます。問題は私がリソースを指定していないことでした。 – user1893983

0

あなたはガード\ルートの代わりのコントローラを使用するための使用例を投稿することができますか?この場合のための私の例のルート:

'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

BjyAuthorize \ガード\ルートを使って、これをしようとしている人を助けるために...

あなたはroute/であなたのルート名をプレフィックスとするためにそれを使用する必要がありますリソース値。

あなたの設定は、このようなガードを持っている場合...あなたはあなたのナビゲーション

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

のためにこのような何かを定義し

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

あなたがこの中に配置することにより、デフォルトのACLと役割を設定することができますあなたのモジュールのあなたのonBootstrapメソッド。

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

私はこれが誰かを助けてくれることを願っています。

+0

こんにちは、これはかなりうまくいきます。しかし、ユーザーが認証されているかどうかを確認するにはどうすればよいですか? hasIdentity()メソッドが存在しません... – cwhisperer

+0

@cwhisperer BjyAuthorizeは[認証なし認証](http://stackoverflow.com/questions/6556522/authentication-versus-authorization)用です。 [ZfcUser Module](https://github.com/ZF-Commons/ZfcUser)は、あなたが探している 'hasIdentity()'メソッドを持つ 'Zend \ Authentication \ AuthenticationService'を使います。 – moranjk

+0

あなたは正しい、thx ...このコンテキストでもう1つの質問:私は$ this-> isAllowed( 'route/xyz')を使うことができるビューで、ビューヘルパーでヘルパーisAllowed()をどうやって使うのですか? – cwhisperer

0

griesiが説明したように、ナビゲーション設定でリソースを指定するだけで済みます。彼の例では

は彼がリソース

コントローラ/ cebEventとして、このコントローラ&アクションを述べました。registrationController:追加

私はちょうどこのバージョンはまた

'リソース' => 'コントローラ/ゲーム\コントローラ\リスト'

(アクションなし、この場合には)動作することを追加したい

多分それは誰かにとって有益です。これはひどく間違っているので、これは決してうまくいかないと思った;)