我正在使用symfony 3.2.3,我希望在同一页面上限制访问。 好的,没问题!配置security.yml,一切都可以完成,实际上它在dev环境中工作。 但是,当我在生产模式下切换我的symfony网站时,没有任何工作了!
切换到prod命令:
我有4页:
这里是我的security.yml
安全性:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_USER_LOGGED: IS_AUTHENTICATED_FULLY
ROLE_ADMIN: ROLE_USER_LOGGED
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
default:
anonymous: ~
http_basic: ~
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
logout:
path: /logout
target: /
access_control:
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/backend, roles: ROLE_ADMIN }
- { path: ^/auth_area, roles: IS_AUTHENTICATED_FULLY }
最后,一切都在dev上工作正常,没有什么工作刺激:匿名用户可以随处访问! ;(
提前致谢!
答案 0 :(得分:2)
PS:我认为第一个指令始终匹配并导致您的问题。
对于每个传入请求,Symfony会检查每个
access_control
条目以找到与当前请求匹配的条目。一旦找到匹配的access_control
条目,它就会停止 - 只有第一个匹配access_control
用于强制访问。
因此,您必须更改规则的顺序,并在最后添加与每个请求(path: ^/
)匹配的规则:
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/backend, roles: ROLE_ADMIN }
- { path: ^/auth_area, roles: IS_AUTHENTICATED_FULLY }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }