在ZF2路由配置中传递自定义变量?

时间:2014-11-17 14:24:56

标签: php zend-framework zend-framework2 acl

我正在考虑实施ACL的最佳方式。所以 - 我需要保护某些路线。有些路线只能供用户访问,有些路径只能访问访客,有些路径只能访问管理员。

似乎最好的方法是在路由配置中添加 $ role 变量。那么我就会附加到路由后事件,获取routeMatch,我会看看这个用户是否可以进入这条路线。

我该怎么做?我可以简单地注入这样的额外变量:

'router' => array(
    'routes' => array(
        'route1' => array(
            'type' => 'Zend\Mvc\Router\Http\Regex',
            'options' => array(
                'regex' => '/some/route/1',
                'defaults' => array(
                    'controller' => 'Subscriber\Controller\View',
                    'action'     => 'route1',
                    'role'       => 'user', //extra
                ),
                'spec' => '/some/route/1',
            ),
        ),
        'route2' => array(
            'type' => 'Zend\Mvc\Router\Http\Regex',
            'options' => array(
                'regex' => '/some/route/2',
                'defaults' => array(
                    'controller' => 'Subscriber\Controller\View',
                    'action'     => 'route2',
                    'role'       => 'guest', //extra
                ),
                'spec' => '/some/route/2',
            ),
        ),
        //other routes....
    ),
),

2 个答案:

答案 0 :(得分:1)

是的,你可以像你一样添加路由器密钥

'defaults' => array(
    'controller' => 'Subscriber\Controller\View',
    'action'     => 'route1',
    'role'       => 'user', //extra
),

然后你可以像这样检查

public function onBootstrap(MvcEvent $e) {
    $application            = $e->getApplication();
    $eventManager = $application->getEventManager();
    $eventManager->attach(MvcEvent::EVENT_ROUTE, function(MvcEvent $e) {
        $e->getRouteMatch()->getParam('role');
    });
}

然而,为此制作了模块 例如bjyoungblood/BjyAuthorize与ZfcUser一起使用

答案 1 :(得分:0)

你应该看一下:ZfcRbac。它有很好的记录。