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

您可以发布一个使用 Guard\Route 而不是 Controller 的用法示例吗?我在这种情况下的示例路线:

'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 提到的,您只需要在导航配置中指定资源。

在他的示例中,他将此控制器和操作声明为资源

控制器/cebEvent.registrationController:添加

我只想补充一点,这个版本也可以工作(在这种情况下没有动作)

'资源' => '控制器/游戏\控制器\列表'

也许它对某人有帮助。我认为这永远不会奏效,因为它看起来非常错误;)

于 2016-01-14T15:23:48.937 回答