无法从不安全区域访问app.user

时间:2012-07-28 16:11:12

标签: security symfony acl

如何从不安全区域获取app.user?

所以我确保了从^ / user开始的区域。

但是我需要在每个人都可以访问的区域显示注销表单而不是安全的。这怎么可能?我的security.yml:

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
        ###:
            algorithm: sha512
            encode-as-base64: true
            iterations: 10
        ###:
            algorithm: sha512
            encode-as-base64: true
            iterations: 10

    role_hierarchy:


    providers:
      admin:
        name: admin
        entity: { class: ###, property: login }
      user:
        name: user
        entity: { class: ###, property: login }        

    firewalls:
      admin:
        pattern: ^/admin
        form_login:
          login_path: ###_login
          check_path: ###_login_process
          default_target_path: /admin/dashboard
        anonymous: ~
        logout:
          path: /admin/logout
          target: /admin/login
        provider: admin
        remember_me:
            key:      "###"
            lifetime: 604800
            path:     /
            domain:   ~ 
      user:
        pattern: ^/user
        form_login:
          login_path: ###_login
          check_path: ###_login_process
          default_target_path: ###
        anonymous: ~
        logout:
          path: /user/logout
          target: /user/login
        provider: user
        remember_me:
            key:      "###"
            lifetime: 604800
            path:     /
            domain:   ~             


    access_control:        
        - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, roles: ROLE_ADMIN }
        - { path: ^/user/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/user/, roles: ROLE_USER }                   

2 个答案:

答案 0 :(得分:1)

我改变了一点我的security.yml。所以目前一切正常。

      user:
        pattern: ^/   


    access_control:
        - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
        ...

更新1

似乎不需要access_controll中的行。此外,由于某种原因(可能是缓存),匿名用户正在访问/用户区域

答案 1 :(得分:0)

您可以在某些不安全的区域获取app.user,因为Symfony安全性依赖于两种不同的机制:身份验证和授权。

身份验证由防火墙定义。一旦你进入防火墙,就会得到一个令牌,最终得到一个app.user,即使它是anonymous

授权access_control规则相关。这是第二步,您不能将访问控制规则放在防火墙之外。在那里,您将处理ROLE要求,例如,如果ROLE_ANONYMOUS是enoug,则需要ROLE_USER ...

还有一件事:为了进一步复杂化,防火墙可以允许或禁止匿名用户。默认情况下,这是真的,因为必需让你在yoru防火墙下登录和登录_check路径,尽管你不能这样做。要求用户拥有ROLE_ANONYMOUS以外的角色(如果你这样做,你将有一个无限循环)。