我已经使用FOSUserBundle很长一段时间了,但这件事从来没有发生在我身上。似乎防火墙无法正常工作,因为我可以访问我网站上的任何页面,而我只能在访问ANONYMOUS
时被重定向到登录页面。
所以,这是我的安全文件:
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js|assets)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout:
invalidate_session: false
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, role: ROLE_USER }
这是我的config.yml文件:
#v1.0
imports:
- { resource: parameters.yml }
- { resource: security.yml }
fos_user:
db_driver: orm
firewall_name: main
user_class: My\Bundle\Entity\User
所以,从我看到的地方,一切都配置正确所以它应该按预期工作。但是,这种情况并没有发生。所以,问题是:我应该在哪里寻找任何冲突的配置文件,或冲突的实体等?因为我在这里问了几个小时之后才问这个问题(我不想问一个愚蠢的问题),但我无法弄清楚会发生什么。
有什么想法吗?
答案 0 :(得分:0)
您的问题:
正确的ACL属性为roles
而不是role
。
工作示例:
security:
# ...
access_control:
# ...
- { path: ^/, roles: ROLE_USER }
- { path: ^/admin, roles: [ROLE_ADMIN, ROLE_TRANSLATOR] }
<强>解释强>
由于属性名称错误,实际上没有配置强制角色。
这就是原因 - 因为您anonymous
设置为true
- 目前无限制地授予访问权限。
请查看文档章节Securing specific URL patterns。