我有这个security.yml文件:
...
security:
encoders:
Trainme\RestBundle\Document\User:
id: security.encoder.blowfish
role_hierarchy:
ROLE_TRAINER: ROLE_USER
ROLE_ADMIN: ROLE_TRAINER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
trainme_admin_provider:
id: trainme_admin.user_provider
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_admin:
pattern: ^/admin
form_login:
check_path: trainme_security_check
login_path: trainme_login
default_target_path: trainme_dashboard
logout:
path: trainme_logout
target: trainme_redirect_route
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/profile, roles: ROLE_TRAINER }
当用户的角色是ROLE_TRAINER时,如果ROLE_ADMIN然后是/ admin,他们将被重定向到/ profile。我使用以下解决方案How to redirect to different url based on roles in symfony 2执行此操作。
问题是: 当看一下/ profile中的调试工具栏时,它说我没有经过身份验证。为什么我没有通过身份验证?我已经使用登录表单登录了。但是当我以ROLE_ADMIN身份登录并且我在/ admin中时,它表示我已通过身份验证。
答案 0 :(得分:0)
只有在请求的网址位于防火墙后面时才会触发身份验证过程。您的防火墙仅适用于模式^ / admin。如果您希望防火墙在整个站点中处于活动状态,则应将模式设置为^ /并使用访问控制部分来定义站点不同区域的特定角色(如您所做)。或者,您可以根据需要设置第二个防火墙,但通常一个具有适当访问控制的防火墙就足够了。