Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 具有多个角色的用户,访问始终被拒绝_Symfony_Fosuserbundle - Fatal编程技术网

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现在可以工作了。我删除了开发缓存,它似乎可以工作