我无法理解为什么无用的用户可以访问我想要保护的路由“^ / nodes $”和“^ / destinations $”。
我哪里错了?我已经仔细阅读了这个资源http://symfony.com/doc/current/book/security.html,但无论如何,这些网址都可以通过匿名查看!
这是我的security.yml:
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:
user: { password: athena_user_2014, roles: [ 'ROLE_USER' ] }
admin: { password: athenaspa2014, roles: [ 'ROLE_ADMIN' ] }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_area:
pattern: ^/backend
form_login:
check_path: /backend/login_check
login_path: /backend/login
csrf_provider: form.csrf_provider
logout:
path: /backend/logout
target: /
#http_basic:
# realm: "Secured Demo Area"
access_control:
- { path: ^/nodes, roles: ROLE_ADMIN }
- { path: ^/destinations, roles: ROLE_ADMIN }
答案 0 :(得分:2)
您的路径不属于任何防火墙模式。您可以进行以下更改以使其正常工作:
firewalls:
secured_area:
pattern: ^/
...
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/backend, role: ROLE_ADMIN }
- { path: ^/node, role: ROLE_ADMIN }
...
- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }
最后一条路径是anonymous: true
所做的。当没有其他访问控制匹配时,用户不需要登录。如果您想要更具限制性,可以像第一个路径^/login$
那样指定哪些路由需要身份验证。请注意,使用了第一个匹配的路线,因此请注意您的订购方式。
或者您可以添加另一个防火墙。但请记住,每个防火墙都提供单独的登录。
您还可以使用php app/console router
- 命令从控制台测试路线。如果您不确定如何使用它们,只需输入php app/console help router:match
例如