Symfony2可以检查路由是否对当前登录的用户有效


Symfony2 can check if a route is valid for the user who is currently logged in

Symfony2可以检查路由是否对当前登录的用户有效,我需要构建一个动态菜单。例如,我想检查用户(角色)是否可以访问这些路由,只是为了表明您可以访问路由。

$menu->addChild('Home', array ('route' => 'homepage'));
$menu->addChild('About Me', array (
    'route' => 'page_show'
    'routeParameters' => array ('id' => 42)
));

对不起我的英语。

(从代码中)看起来您正在使用KnpMenuBundle。

这意味着,如果是这样的话,你是在服务。

只需在MenuBuilder服务中注入security_context服务,就可以检查用户是否可以访问链接。

#MenuBuilder.php
if $securityContext->getToken()->getUser() && $securityContext->isGranted('ROLE_ADMIN') {
    $menu->addChild('Administration', array("route" => ......);
}

然而,您需要使用注释来保护控制器中的路由:

    /**
     * Administration index page
     *
     * @Route("/administration/index", name="administration_index")
     * @Template
     * @Secure(roles="ROLE_ADMIN")
     *
     * @return array|Response
     */