在我的网站上,我有一些有很多角色的管理员。 我想限制对某些管理员的部分访问,因此我要求在进入之前授予特定角色。管理员需要为他们分配“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}
出于某种原因,我的管理员在授予角色时无法访问该页面。我认为它与角色层次结构有关。
如果我能为您提供更多信息,请与我们联系。
谢谢,
答案 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}