大家好,我是Symfony的新手,有一个简单的问题。
在security.yml
文件中,我设置了一些访问控制路径:
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: .*settings, roles: ROLE_USER }
- { path: ^/$, roles: ROLE_USER }
- { path: ^/.*, roles: ROLE_ADMIN }
到目前为止,我想这样做。
现在我正在建立一个菜单并希望隐藏根据其访问权限显示导航项目,那么我该如何获取这些信息呢?
必须有一些功能:
$securityContext->isUrlGranted( $this->generateUrl('homepage') );
感谢您的帮助。
修改
示例:
// current user is ROLE_ADMIN:
$acl->isUrlGranted( 'foo/bar' ); // true
$acl->isUrlGranted( 'login' ); // true
// IS_AUTHENTICATED_ANONYMOUSLY
$acl->isUrlGranted( 'login' ); // true
$acl->isUrlGranted( 'something/else' ); // false
// ROLE_USER
$acl->isUrlGranted( 'settings/profile' ); // true
$acl->isUrlGranted( 'foo/bar' ); // false
等。
答案 0 :(得分:1)
现在Symfony
通过一个函数获取此信息没有简单的方法。
要获得此功能,您可以使用security.access_control
服务访问应用中的security.access_map
个参数。
但是您无法直接从容器中请求它,因为它是私人服务,因此必须将其注入其他服务。
只有这样,您才能使用Twig
功能编写自己的isUrlGranted()
扩展程序。
P.S。:我的回答只是关于类似问题的写得很好answer的简短摘要。
答案 1 :(得分:0)
如果您在视图中使用twig(应包含菜单),则可以使用以下方法测试用户角色:
{# my menu.twig.html #}
{% if app.security.isGranted('ROLE_ADMIN', app.user) %}
....
{% endif %}
顺便说一句,您可以在控制器中执行相同操作,但我认为您的布局包含菜单,所以我发布了一个枝条答案。告诉我它是否与您相关并对您有所帮助。