如何集成路由和安全访问控制

时间:2011-08-02 21:13:28

标签: symfony twig

如果登录用户不允许路由或路径,我需要在模板中隐藏一些链接。像这样:

{% if allowedroute 'fos_user_security_logout' %}    
<a href="{{ path('fos_user_security_logout') }}" class="action-logout">
    {{ 'layout.logout'|trans({}, 'FOSUserBundle') }}
    </a>
{% endif %}

如何确定登录用户的安全access_control是否允许? 可能有这样的功能:

$securityContext->isRouteGranted('routeName');
or
$securityContext->isUriGranted('uri/path');

2 个答案:

答案 0 :(得分:1)

据我所知,没有办法检查来自树枝的路线。但是,由于您必须使用用户角色设置security.yml access_control路由,因此您可以在模板中检查基于角色的身份验证:

{% if is_granted('IS_AUTHENTICATED_REMEMBERED') %}
// logout link here
{% endif %}

它不是那么动态,但除非你的路线发生很大变化,否则它应该不是问题。

答案 1 :(得分:0)

如果你想为KnpMenuBundle隐藏物品 - you need to extend menu renderer and menu item classes to support permissions。您还可以尝试查看SecurityExtraBundle以将权限置于控制器操作上并使用它来将安全权限绑定到路由 - 据我所知,Sf2目前还没有它。您可以在控制器内部尝试以下带注释的示例:

/**
 * @Route("/create", name="create_group")
 * @Secure(roles="ROLE_CREATE_GROUP")
 * @Template()
 */
public function createGroupAction(Request $request) {