如何检查symfony2中的用户角色,以查找不属于模式定义的security.yml的URL?

adi*_*tya 12 php symfony

我有一个管理面板,我已经为它定义了一个角色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

SecurityContext将被弃用 Symfony 3.0

Symfony 2.6你使用之前SecurityContext.
SecurityContext将被弃用以Symfony 3.0支持AuthorizationChecker.

用于Symfony 2.6+Symfony 3.0使用AuthorizationChecker.


Symfony 2.5(及以下)

if ($this->get('security.context')->isGranted('ROLE_ADMIN')) {
    # User is a ROLE_ADMIN
}
Run Code Online (Sandbox Code Playgroud)

Symfony 2.6(及以上)

if ($this->get('security.authorization_checker')->isGranted('ROLE_ADMIN')) {
    # User is a ROLE_ADMIN
}
Run Code Online (Sandbox Code Playgroud)

类似问题:如何检查用户是否在控制器内登录Symfony2?

阅读更多文档: AuthorizationChecker


its*_*inn 5

你是该页面的控制器吗?如果是这样,请使用isGranted安全上下文的方法:控制器的访问控制