Symfony 具有多个角色的用户,访问始终被拒绝
用户可以有多个角色,例如Symfony 具有多个角色的用户,访问始终被拒绝,symfony,fosuserbundle,Symfony,Fosuserbundle,用户可以有多个角色,例如ROLE\u USER、ROLE\u SUBSCRIBTION\u FOO、ROLE\u SUBSCRIBTION\u BAR 根据他们的角色,我定义了一个访问控制列表: - { path: ^/admin/helpdesk/foo, roles: ROLE_SUBSCRIPTION_FOO } - { path: ^/admin/helpdesk/index, roles: ROLE_ADMIN } 角色层次结构 role_hierarchy:
ROLE\u USER、ROLE\u SUBSCRIBTION\u FOO、ROLE\u SUBSCRIBTION\u 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\u SUBSCRIBTION\u FOO
并访问/admin/helpdesk/FOO
时,访问被拒绝。该用户同时具有角色\u ADMIN和角色\u SUBSCRIBTION\u FOO。但是当我
- { path: ^/admin/helpdesk/foo, roles: ROLE_ADMIN }
它能工作,但我需要它
- { path: ^/admin/helpdesk/foo, roles: ROLE_SUBSCRIPTION_FOO }
哪一个不起作用,但是用户有这个角色?这有点奇怪。知道问题出在哪里吗?查看设置,一切似乎都正常 我想从应用程序的管理区域动态更改用户角色。例如,我将FOO角色授予用户BOB,并期望更改立即生效 但这是行不通的。未刷新用户BOB当前打开的会话。他必须重新认证自己。重新验证(注销并再次登录)后,symfonys安全系统将正确比较角色与给定的访问列表
因此,我希望用户会话能够自动更新,但对于默认的symfony安全系统,这是不可能的。我认为它需要通过基于数据库的会话管理进行扩展。通过这种方式,您可以刷新用户会话。在我看来,这像是一个打字错误。您在层次结构中定义了
ROLE\u SUBSCRIPTION\u FOO
(带B),但您想用ROLE\u SUBSCRIPTION\u FOO
(带P)限制路径。您确定要测试的用户具有ROLE\u ADMIN
而不是ROLE\u SUPER\u ADMIN
?因为在您的实际设置中,具有角色超级管理员的用户没有角色订阅
。不,具有角色a:2:{i:0;s:10:“角色管理员”;i:1;s:21:“角色订阅”;}的用户是我正在测试的用户吗。。。您是否已检查用户在会话中是否也具有这些角色?不在数据库中?选中数组(3){[0]=>string(10)“角色管理”[1]=>string(21)“角色订阅”[3]=>string(9)“角色用户”}Awww现在可以工作了。我删除了开发缓存,它似乎可以工作