如何为管理员分配额外角色

时间:2014-09-03 13:47:07

标签: symfony

在我的网站上,我有一些有很多角色的管理员。 我想限制对某些管理员的部分访问,因此我要求在进入之前授予特定角色。管理员需要为他们分配“ROLE_REPORT”角色才能访问/报告页面。

这是我的代码:

security:
    role_hierarchy:
        ROLE_REPORT : ROLE_USER
        ROLE_MERCHANT:    ROLE_USER
        ROLE_VIRTUAL_TERMINAL: ROLE_MERCHANT
        ROLE_ONLINE_CHECKOUT: ROLE_MERCHANT
        ROLE_ADMIN:       [ROLE_MERCHANT, ROLE_VIRTUAL_TERMINAL, ROLE_ONLINE_CHECKOUT]
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    access_control:

        # Section Report
        - { path: /report(.*), roles: ROLE_REPORT}

出于某种原因,我的管理员在授予角色时无法访问该页面。我认为它与角色层次结构有关。

如果我能为您提供更多信息,请与我们联系。

谢谢,

2 个答案:

答案 0 :(得分:1)

默认情况下,您需要再次注销/登录才能使新角色生效。

然而,还有另一种选择。根据安全性引用,有一个选项always_authenticate_before_granting,如果设置为true,则会在每个请求上刷新令牌。 Symfony每次都会转到DB来刷新角色。

iamdto通过示例和链接提供了类似的答案

答案 1 :(得分:0)

您应该添加一个新角色,例如ROLE_ADMIN_REPORT并以这种方式修改您的安全性:

security:
    role_hierarchy:
        ROLE_REPORT : ROLE_USER
        ROLE_MERCHANT:    ROLE_USER
        ROLE_VIRTUAL_TERMINAL: ROLE_MERCHANT
        ROLE_ONLINE_CHECKOUT: ROLE_MERCHANT
        ROLE_ADMIN:       [ROLE_MERCHANT, ROLE_VIRTUAL_TERMINAL, ROLE_ONLINE_CHECKOUT]
        ROLE_ADMIN_REPORT: [ROLE_ADMIN, ROLE_REPORT]
        ROLE_SUPER_ADMIN: ROLE_ADMIN

access_control:

    # Section Report
    - { path: /report(.*), roles: ROLE_REPORT}