如何在Symfony2中添加新角色?

时间:2014-01-26 13:25:48

标签: symfony

我正在尝试在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中阅读了该文档。我不知道我做错了什么。

1 个答案:

答案 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