Symfony 3安全性 - Access_control不适用于一条路由

时间:2017-08-04 09:37:21

标签: php symfony security routing roles

我目前正在处理PDF生成器,但我在访问网址时遇到问题。

任何人都应该能够下载PDF。 在我的security.yml中,我目前有这个:

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

    role_hierarchy: ~

    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_token_generator: security.csrf.token_manager
            logout:       true
            anonymous:    true

    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/gc/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, role: ROLE_USER }
        - { path: ^/, role: ROLE_USER }

我希望人们可以访问以下网址:/admin/maintenance/pdf/{id}

所以我添加了以下一行:

access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/gc/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, role: ROLE_USER }
        - { path: ^/, role: ROLE_USER }
        - { path: ^/admin/maintenance/pdf/$, role: [ROLE_USER,IS_AUTHENTICATED_ANONYMOUSLY] }

但是当我没有登录时,我仍然被重定向到登录页面。

我做了几次测试,以下是有问题的一行:

- {path: ^ /, role: ROLE_USER}

我想我错误配置了对网址的访问权。

有人可以帮帮我吗? 谢谢

2 个答案:

答案 0 :(得分:4)

ACL中的项目会经常处理,因此您需要将其放在:

access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/gc/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/maintenance/pdf/$, role: [ROLE_USER,IS_AUTHENTICATED_ANONYMOUSLY] }
        - { path: ^/admin, role: ROLE_USER }
        - { path: ^/, role: ROLE_USER }

答案 1 :(得分:0)

提升更具体的规则,使它们首先匹配。