5

統合BjyAuthorizeとZendナビゲーションに問題があり、それらを解決する方法がわかりません。私はこのマニュアルを試してみましたが、すべてうまくいきました。しかし、ガードを定義しbjyauthorize.configた後、ナビゲーションとガード構成の間に反映があると予想しました(拒否されたコントローラーまたはルートはナビゲーションアイテムを表示しません)。私の問題は、ナビゲーションアイテムがまだ表示されているのに、セクションが正しく保護されていることです。警備員をナビゲーションに反映させる方法はありますか?Module.phpのビューヘルパー構成

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

bjyauthorize.global.phpのガード構成

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

そして私のnavigation.global.php

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

ルート構成をモジュール/コントローラー/アクションに変更しようとしましたが、それでも機能しません。

4

4 に答える 4

6

BjyAuthorize \ Guard\Routeを使用してこれを試みている人を助けるために...

ルート名の前にプレフィックスを付け、route/それをリソース値に使用する必要があります。

構成にこのようなガードがある場合...

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

あなたはあなたのナビゲーションのためにこのようなものを定義するでしょう

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

モジュールのonBootstrapメソッドにこれを配置することにより、デフォルトのACLとロールを設定できます。

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

これが誰かに役立つことを願っています。

于 2013-08-19T03:34:03.677 に答える
5

ナビゲーション構成内でリソースを指定しませんでした。また、$roleがbjyauthorize-identityと一致するかどうかを確認してください

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

指定するリソースは、ガード構成と一致する必要があります。

'guards' => array(
    'BjyAuthorize\Guard\Controller' => array(
        array('controller' => 'cebEvent.registrationController','action' => 'add', 'roles' => array('guest','registration_manage')),
    ),
 ),
于 2012-12-11T12:21:59.580 に答える
0

Controllerの代わりにGuard\Routeを使用するための使用例を投稿できますか?この場合の私の例のルート:

'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')),
    )
);
于 2013-06-07T08:48:26.100 に答える
0

griesiが述べたように、ナビゲーション構成でリソースを指定する必要があります。

彼の例では、彼はこのコントローラーとアクションをリソースとして述べました

controller / cebEvent.registrationController:add

このバージョンも機能することを追加したいだけです(この場合はアクションなしで)

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

多分それは誰かのために役立ちます。ひどく間違っているように見えるので、これは決して機能しないと思いました;)

于 2016-01-14T15:23:48.937 に答える