我遇到了集成BjyAuthorize
和Zend导航的问题,并且不知道如何解决它们。我试试这个manual,一切正常。但我预计当我在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',
),
),
));
我尝试将路由配置更改为模块/控制器/操作,但仍无法正常工作。
答案 0 :(得分: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);
我希望这可以帮助那些人。
答案 1 :(得分: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')),
),
),
答案 2 :(得分: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')),
)
);
答案 3 :(得分:0)
正如griesi所说,你只需要在导航配置中指定资源。
在他的例子中,他说这个控制器&作为资源的行动
控制器/ cebEvent.registrationController:添加
我只是想补充一点,这个版本也有效(在这种情况下没有动作)
'resource'=> '控制器/游戏\控制器\列表'
也许这对某人有帮助。我认为这将永远不会起作用,因为它看起来非常错误;)