symfony security prod不起作用

时间:2017-02-19 14:51:32

标签: security symfony production-environment

我正在使用symfony 3.2.3,我希望在同一页面上限制访问。 好的,没问题!配置security.yml,一切都可以完成,实际上它在dev环境中工作。 但是,当我在生产模式下切换我的symfony网站时,没有任何工作了!

切换到prod命令:

  • php bin \ console cache:clear --env = prod --no-debug

我有4页:

  • / homepage(可以访问所有人)
  • / lucky(可以访问所有人)
  • / auth_area(只能访问已登录的用户)
  • / backend(只能访问ROLE_ADMIN用户)

这里是我的security.yml

安全性:

encoders:
    FOS\UserBundle\Model\UserInterface: bcrypt

role_hierarchy:
    ROLE_USER_LOGGED: IS_AUTHENTICATED_FULLY
    ROLE_ADMIN:       ROLE_USER_LOGGED

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    default:
        anonymous: ~
        http_basic: ~
        form_login:
            provider: fos_userbundle
            csrf_token_generator: security.csrf.token_manager
        logout:
            path: /logout
            target: /

access_control:
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/backend, roles: ROLE_ADMIN }
    - { path: ^/auth_area, roles: IS_AUTHENTICATED_FULLY }

最后,一切都在dev上工作正常,没有什么工作刺激:匿名用户可以随处访问! ;(

提前致谢!

1 个答案:

答案 0 :(得分:2)

gp_sflover in a comment撰写:

  

PS:我认为第一个指令始终匹配并导致您的问题。

documentation

  

对于每个传入请求,Symfony会检查每个access_control条目以找到与当前请求匹配的条目。一旦找到匹配的access_control条目,它就会停止 - 只有第一个匹配access_control用于强制访问。

因此,您必须更改规则的顺序,并在最后添加与每个请求(path: ^/)匹配的规则:

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/backend, roles: ROLE_ADMIN }
    - { path: ^/auth_area, roles: IS_AUTHENTICATED_FULLY }
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }