【发布时间】:2013-02-27 07:26:20
【问题描述】:
用户可能有多个角色,例如ROLE_USER, ROLE_SUBSCRIBTION_FOO, ROLE_SUBSCRIBTION_BAR.
根据他们的角色,我定义了一个访问控制列表:
- { path: ^/admin/helpdesk/foo, roles: ROLE_SUBSCRIPTION_FOO }
- { path: ^/admin/helpdesk/index, roles: ROLE_ADMIN }
角色层次结构
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUBSCRIBTION_FOO: ROLE_ADMIN
ROLE_SUPER_ADMIN: ROLE_ADMIN
现在的问题是,当用户拥有ROLE_SUBSCRIBTION_FOO 角色并访问/admin/helpdesk/foo 时,访问被拒绝。用户同时拥有 ROLE_ADMIN 和 ROLE_SUBSCRIBTION_FOO。但是当我有
- { path: ^/admin/helpdesk/foo, roles: ROLE_ADMIN }
它有效,但我需要它
- { path: ^/admin/helpdesk/foo, roles: ROLE_SUBSCRIPTION_FOO }
哪个不起作用,但是用户确实具有角色?这有点奇怪。有什么想法吗?
【问题讨论】:
-
您确定您正在测试的用户拥有
ROLE_ADMIN而不是ROLE_SUPER_ADMIN?因为在您的实际设置中,ROLE_SUPER_ADMIN的用户没有ROLE_SUBSCRIBTION。 -
不,角色为 a:2:{i:0;s:10:"ROLE_ADMIN";i:1;s:21:"ROLE_SUBSCRIBTION_FOO";} 的用户是我正在测试的用户
-
嗯,看起来是对的...您是否检查过用户在会话中是否也具有这些角色?不只在数据库中?
-
检查数组(3) { [0]=> string(10) "ROLE_ADMIN" [1]=> string(21) "ROLE_SUBSCRIBTION_FOO" [3]=> string(9) "ROLE_USER" }
-
Awww 现在可以使用了。我删除了开发缓存,它似乎可以工作
标签: symfony fosuserbundle