我无法按照我想要的方式安全地工作。
我希望管理部分受到保护,因此只有 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条目,但没有找到任何可以帮助我解决这个问题。
答案 0 :(得分:2)
好的,仅仅20分钟后,在第三次挖掘Symfony2书后我发现了这个:
多个防火墙不共享安全上下文
如果您正在使用多个防火墙并且您针对一个防火墙进行身份验证,则不会自动对任何其他防火墙进行身份验证。
只需在“^ /”模式上使用一个防火墙并将access_control设置为:
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }