1

用户可能有多个角色,例如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 }

哪个不起作用,但是用户确实具有角色?这有点奇怪。任何想法问题出在哪里?

4

2 回答 2

2

对我来说,这看起来像是一个错字。您ROLE_SUBSCRIBTION_FOO在层次结构中定义(使用 B),但您希望使用ROLE_SUBSCRIPTION_FOO(使用 P)限制路径。

于 2013-02-26T09:12:55.403 回答
0

查看设置,一切似乎都是正确的。

我想从我的应用程序的管理区域动态更改用户角色。因此,例如,我将 FOO 角色授予用户 BOB,并期望更改立即生效。

但这不起作用。不刷新用户 BOB 当前打开的会话。他必须重新验证自己的身份。在重新验证(注销并再次登录)后,symfonys 安全系统将正确地比较角色与给定的访问列表。

所以我希望用户会话能够自动更新,但是这对于 symfony 的默认安全系统是不可能的。我认为它需要使用基于数据库的会话管理进行扩展。这样您就可以刷新用户会话。

于 2013-02-25T21:19:25.090 回答