如何将 url 与 Symfony 的安全访问控制相匹配
How to match url's against Symfony's security access control
大家好,我是 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
等..
如果您在视图中使用 twig(应包含菜单),您可以使用以下方法测试用户角色:
{# my menu.twig.html #}
{% if app.security.isGranted('ROLE_ADMIN', app.user) %}
....
{% endif %}
顺便说一句,您可以在您的控制器中执行相同的操作,但我认为您的布局包含菜单,所以我发布了一个树枝答案。告诉我它是否对你有用。
现在没有简单的方法Symfony
通过一个函数获取此信息。
要获取它,您可以使用 security.access_map
服务访问应用程序中的 security.access_control
参数。
但是不能直接从容器中请求,因为是私有服务,需要注入到其他服务中。
只有这样,您才能使用 isUrlGranted()
功能编写自己的 Twig
扩展。
P.S.: 我的回答只是对类似问题 answer 写得很好的简短总结。
大家好,我是 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
等..
如果您在视图中使用 twig(应包含菜单),您可以使用以下方法测试用户角色:
{# my menu.twig.html #}
{% if app.security.isGranted('ROLE_ADMIN', app.user) %}
....
{% endif %}
顺便说一句,您可以在您的控制器中执行相同的操作,但我认为您的布局包含菜单,所以我发布了一个树枝答案。告诉我它是否对你有用。
现在没有简单的方法Symfony
通过一个函数获取此信息。
要获取它,您可以使用 security.access_map
服务访问应用程序中的 security.access_control
参数。
但是不能直接从容器中请求,因为是私有服务,需要注入到其他服务中。
只有这样,您才能使用 isUrlGranted()
功能编写自己的 Twig
扩展。
P.S.: 我的回答只是对类似问题 answer 写得很好的简短总结。