按角色的Symfony access_control

时间:2014-02-28 13:53:54

标签: security symfony

我读了这页关于Symfony security

的内容

但是我不能使用access_control。我有两条路线和仪表板。返回仅适用于ROLE_SUPER_ADMIN,并且为了转到仪表板,必须对用户进行身份验证。

匿名用户可以到处去,ROLE_USER可以返回(仅限SUPER ADMIN)

这是我的文件security.yml

security:
encoders:
    FOS\UserBundle\Model\UserInterface: sha512

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:
    main:
        pattern:    ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
        logout:       true
        anonymous:    true

access_control:
    - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/dashboard, roles: ROLE_USER }
    - { path: ^/back, roles: ROLE_ADMIN }

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

当然,匿名用户可以到处走!看看你的第一条规则

access_control:
    - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }

即使是/back路径,规则似乎也会正常运行,因为您点击了授予操作的第一个access_control规则

更快的解决方案:尝试颠倒您的规则订单

更好的解决方案:尝试编写更好(不太常规)的规则[如果您的应用允许您这样做]