0

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

我希望管理部分受到保护,因此只有具有ROLE_ADMIN的人才能访问它。这很好用。但是,我希望我的未受保护/公共区域能够区分ROLE_ADMINIS_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_ADMINIS_AUTHENTICATED_ANONYMOUSLY角色添加到访问控制中的 '^/' 路径,但它不会改变任何内容。

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

4

1 回答 1

2

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

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

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

只需在 '^/' 模式上使用一个防火墙并将 access_control 设置为此就足够了:

- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
于 2013-06-02T18:29:32.917 回答