首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将BjyAuthorize与Zend\ ZF2集成

将BjyAuthorize与Zend\ ZF2集成
EN

Stack Overflow用户
提问于 2012-12-11 16:11:05
回答 4查看 3.5K关注 0票数 5

我有一个集成BjyAuthorize和Zend导航的问题,不知道如何解决它们。我试了试这个manual,一切都很好。但我预计当我在bjyauthorize.config中定义守卫时,在我的导航和守卫配置之间会有反射(被拒绝的控制器或路由不显示导航项目)。我的问题是导航项仍然显示,但部分得到了正确的保护。有没有办法,如何将守卫反映到导航中?我在Module.php中的视图帮助器配置

My Application/Module.php view helper配置:

代码语言:javascript
复制
'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中的防护配置

代码语言:javascript
复制
'guards' => array(
    'BjyAuthorize\Guard\Controller' => array(
        array('controller' => 'Article\Controller\Article', 'roles' => array('user')),
),

还有我的navigation.global.php

代码语言:javascript
复制
return array(
    'navigation' => array(
       'default' => array(
           'articles' => array(
                'label' => 'Articles',
                'route' => 'articles',
            ),
        ),
    ));

我尝试将路由配置更改为模块/控制器/操作,但仍然不起作用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-11 20:22:00

您未在导航配置中指定资源。还要确保身份是否与bjyauthorize- $role匹配

代码语言:javascript
复制
'navigation' => array(
  'default' => array(
     array(
       'label' => 'Registration',
   'resource'   => 'controller/cebEvent.registrationController:add',
   'route' => 'registration/add',
     ),
  ),
),

指定的资源必须与您的保护配置匹配:

代码语言:javascript
复制
'guards' => array(
    'BjyAuthorize\Guard\Controller' => array(
        array('controller' => 'cebEvent.registrationController','action' => 'add', 'roles' => array('guest','registration_manage')),
    ),
 ),
票数 5
EN

Stack Overflow用户

发布于 2013-08-19 11:34:04

为了帮助任何尝试使用BjyAuthorize\Guard\Route的人...

您需要在路由名称前加上route/前缀,并将其用作资源值。

如果你的配置中有这样的守卫...

代码语言:javascript
复制
'guards' => array(
    'BjyAuthorize\Guard\Route' => array(
         array('route' => 'zfcadmin/zfcuseradmin/list', 'roles' => array('admin')),
     )
);

代码语言:javascript
复制
'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和角色。

代码语言:javascript
复制
$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);

我希望这能对外面的人有所帮助。

票数 6
EN

Stack Overflow用户

发布于 2013-06-07 16:48:26

你能发布一个使用Guard\Route而不是Controller的使用示例吗?本例中的示例路由:

代码语言:javascript
复制
'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')),
    )
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13816092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档