我有一个管理面板,我已经为它定义了一个角色ROLE_ADMIN.在我的security.yml文件中,我使用的是一个模式,^/admin/*所以/ admin下的所有东西都需要ROLE_ADMIN.现在在我的应用程序的前端,我需要检查用户角色,如果角色是ROLE_ADMIN渲染一个文件,否则渲染另一个文件.此URL不属于security.yml中定义的模式.
那么如何在主页上检查用户是管理员还是普通用户,该用户不属于security.yml中定义的模式?
Eln*_*mov 29
使用^/模式在整个应用程序上启用防火墙,允许匿名访问并使用access_control限制访问:
security:
firewalls:
secured_area:
pattern: ^/
anonymous: ~
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
Run Code Online (Sandbox Code Playgroud)
正如@itsmequinn建议的那样,使用isGranted()安全上下文的方法:
if ($this->get('security.context')->isGranted('ROLE_BRAND')) {
// the user has the ROLE_BRAND role, so act accordingly
}
Run Code Online (Sandbox Code Playgroud)
在Symfony 2.6中,security.context已经分为两个单独的服务.因此,您需要使用该security.authorization_checker服务来解决问题:
if ($this->get('security.authorization_checker')->isGranted('ROLE_BRAND')) {
// the user has the ROLE_BRAND role, so act accordingly
}
Run Code Online (Sandbox Code Playgroud)
Ani*_*nil 20
Symfony 3.0在Symfony 2.6你使用之前SecurityContext.
SecurityContext将被弃用以Symfony 3.0支持AuthorizationChecker.
用于Symfony 2.6+和Symfony 3.0使用AuthorizationChecker.
if ($this->get('security.context')->isGranted('ROLE_ADMIN')) {
# User is a ROLE_ADMIN
}
Run Code Online (Sandbox Code Playgroud)
if ($this->get('security.authorization_checker')->isGranted('ROLE_ADMIN')) {
# User is a ROLE_ADMIN
}
Run Code Online (Sandbox Code Playgroud)
阅读更多文档: AuthorizationChecker
| 归档时间: |
|
| 查看次数: |
39367 次 |
| 最近记录: |