symfony access_control无法正常工作

时间:2014-08-14 12:27:03

标签: symfony routes access-control

我的acces_control insisde security.yml不起作用。我已经清除缓存而没有任何结果:)

当我阅读documentation时,我发现任何错误......非常,只有ROLE_ADMIN才能访问路径/ user /。角色是正确的,我用

进行了测试
{% if is_granted('ROLE_ADMIN') %}   
在Twig里面。

安全性:     编码器:         FOS \ UserBundle \ Model \ UserInterface:pbkdf2

role_hierarchy:
    ROLE_CUSTOMER_REVISION: ROLE_USER
    ROLE_CUSTOMER_MANAGER:  [ROLE_CUSTOMER_REVISION, ROLE_IOS]
    ROLE_CUSTOMER_ADMIN:    ROLE_CUSTOMER_MANAGER
    ROLE_ADMIN:             [ROLE_CUSTOMER_ADMIN]

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, role: ROLE_USER }
    - { path: ^/admin/, role: ROLE_ADMIN }
    - { path: ^/user/, role: ROLE_ADMIN }

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:
    dev:
         pattern:  ^/(_(profiler|wdt)|css|images|js)/
         security: false
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            default_target_path: /{locale}/
        logout:       true
        anonymous:    true

AM我做错了什么我不明白?

1 个答案:

答案 0 :(得分:8)

您必须将acces_control子句从最具体到最一般的排序:

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }
    - { path: ^/user/, role: ROLE_ADMIN }
    - { path: ^/, role: ROLE_USER }

这是因为路由/admin也匹配^/模式,因此必须先放置限制模式^/admin/