我正在尝试在Symfony2中配置一个新角色。我编辑了security.yml
文件如下:
role_hierarchy:
ROLE_Administrator: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
ROLE_Doctor: ROLE_ADMIN
ROLE_Patient: ROLE_USER
access_control:
- { path: /login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_Administrator }
然而,当我尝试登录时,我总是得到:
Access Denied
403 Forbidden
- AccessDeniedHttpException
1 linked Exception: AccessDeniedException »
我在official Symfony2 site中阅读了该文档。我不知道我做错了什么。
答案 0 :(得分:2)
在security.yml中,在层次结构和访问控制中,角色必须相同。
role_hierarchy:
ROLE_Administrator: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
ROLE_Doctor: ROLE_ADMIN
ROLE_Patient: ROLE_USER
access_control:
- { path: /login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_ADMIN }
您可以定义所需的ROLE。您可以根据需要将管理员称为ROLE_ADMIN或ROLE_Administrator,但在每种情况下都必须使用相同的名称。如果你使用两个不同的名字Symfony只是认为你指的是两种不同的角色。然后,在您的role_hierarchy中,您可以定义ROLE_Doctor包含ROLE_ADMIN等等...... 我没有看到你的控制器,但你确定你的用户定义了一个不允许看到路径的角色:^ /因为你通过了防火墙(你已登录)而不是访问控制(你不能看到这个页)。
注意因为
ROLE_Doctor: ROLE_ADMIN
ROLE_Patient: ROLE_USER
在上面的配置中,具有ROLE_Doctor角色的用户也将具有ROLE_ADMIN角色,而ROLE_Patient也将具有ROLE_USER角色。文档here