ZF2将BjyAuthorize与Zend\Navigation集成
我在集成ZF2将BjyAuthorize与Zend\Navigation集成,navigation,zend-framework2,Navigation,Zend Framework2,我在集成BjyAuthorize和Zend导航方面遇到问题,不知道如何解决。我试试这个,一切都很好。但我预计当我在bjyauthorize.config中定义警卫时,我的导航和警卫配置之间会出现反射(被拒绝的控制器或路线不显示导航项目)。我的问题是,导航项仍然显示,但分区得到了正确的保护。有没有办法,如何将警卫反映到导航中? Module.php中的My view helper配置 My Application/Module.php视图帮助程序配置: 'mainMenu' => funct
BjyAuthorize
和Zend导航方面遇到问题,不知道如何解决。我试试这个,一切都很好。但我预计当我在bjyauthorize.config
中定义警卫时,我的导航和警卫配置之间会出现反射(被拒绝的控制器或路线不显示导航项目)。我的问题是,导航项仍然显示,但分区得到了正确的保护。有没有办法,如何将警卫反映到导航中?
Module.php中的My view helper配置
My 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__);
}
'guards' => array(
'BjyAuthorize\Guard\Controller' => array(
array('controller' => 'cebEvent.registrationController','action' => 'add', 'roles' => array('guest','registration_manage')),
),
),
bjyauthorize.global.php中的我的防护配置
'guards' => array(
'BjyAuthorize\Guard\Controller' => array(
array('controller' => 'Article\Controller\Article', 'roles' => array('user')),
),
return array(
'navigation' => array(
'default' => array(
'articles' => array(
'label' => 'Articles',
'route' => 'articles',
),
),
));
还有My navigation.global.php
'guards' => array(
'BjyAuthorize\Guard\Controller' => array(
array('controller' => 'Article\Controller\Article', 'roles' => array('user')),
),
return array(
'navigation' => array(
'default' => array(
'articles' => array(
'label' => 'Articles',
'route' => 'articles',
),
),
));
我尝试将routes配置更改为module/controller/action,但仍然不起作用。您没有在导航配置中指定资源。还要确保$role是否与bjyauthorize标识匹配
'navigation' => array(
'default' => array(
array(
'label' => 'Registration',
'resource' => 'controller/cebEvent.registrationController:add',
'route' => 'registration/add',
),
),
),
指定的资源必须与您的保护配置匹配:
'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__);
}
'guards' => array(
'BjyAuthorize\Guard\Controller' => array(
array('controller' => 'cebEvent.registrationController','action' => 'add', 'roles' => array('guest','registration_manage')),
),
),
您能否发布一个使用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')),
)
);
要使用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',
),
),
),
),
),
通过将默认ACL和角色放置在模块的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);
我希望这对其他人有所帮助。正如griesi提到的,您只需要在导航配置中指定资源 在他的示例中,他将此控制器和操作称为资源 控制器/cebEvent.注册控制器:添加 我只想补充一点,这个版本也可以工作(在这种情况下,没有操作) '资源'=>'控制器/游戏\控制器\列表'
也许这对某人有帮助。我认为这是行不通的,因为它看起来非常错误;) 谢谢你的建议,你是对的。问题在于我没有指定资源。嗨,这很有效。但是如何检查用户是否经过身份验证?方法hasIdentity()不存在…@cwhisperer BjyAuthorize用于。使用了
Zend\Authentication\AuthenticationService
,它具有您正在寻找的hasIdentity()
方法。您是对的,thx。。。在此上下文中还有一个问题:在我可以使用$this->isAllowed('route/xyz')的视图中,如何在视图帮助程序中使用帮助程序isAllowed()?我不是这方面的专家,但您应该能够在另一个视图帮助程序中调用$this->getView()->isAllowed('route/xyz')
。我不知道你为什么要这么做,但我不是来判断的;)