我正在考虑实施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....
),
),
答案 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。它有很好的记录。