公共区域中的Symfony2管理令牌

时间:2013-06-02 18:08:56

标签: php security symfony

我无法按照我想要的方式安全地工作。

我希望管理部分受到保护,因此只有 ROLE_ADMIN 的人才能访问它。这很好用。但是,我希望不受保护/公开区域能够区分 ROLE_ADMIN IS_AUTHENTICATED_ANONYMOUSLY

我无法让它发挥作用。登录管理部分后。我可以在工具栏中看到我已通过身份验证并且 ROLE_ADMIN ,但是当我回到网站的公共部分时,它会变成匿名身份验证

以下是我目前的安全设置:

jms_security_extra:
    secure_all_services: false
    expressions: true

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        in_memory:
            memory:
                users:
                    myusername:  { password: mypassword, roles: [ 'ROLE_ADMIN' ] }

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

        login_area:
            pattern: ^/login$
            anonymous: ~

        secured_area:
            pattern: ^/admin|^/login_check$|^/logout$
            form_login: ~
            logout: ~

        public_area:
            pattern: ^/
            anonymous: ~

    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, roles: ROLE_ADMIN }
        - { path: ^/, roles: [ROLE_ADMIN, IS_AUTHENTICATED_ANONYMOUSLY] }

正如您所看到的,我尝试将 ROLE_ADMIN IS_AUTHENTICATED_ANONYMOUSLY 角色添加到访问控制中的“^ /”路径,但它不会更改任何内容。

我搜索了Symfony2的书和Cookbook条目,但没有找到任何可以帮助我解决这个问题。

1 个答案:

答案 0 :(得分:2)

好的,仅仅20分钟后,在第三次挖掘Symfony2书后我发现了这个:

  

多个防火墙不共享安全上下文

     

如果您正在使用多个防火墙并且您针对一个防火墙进行身份验证,则不会自动对任何其他防火墙进行身份验证。

只需在“^ /”模式上使用一个防火墙并将access_control设置为:

- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }