【发布时间】:2014-11-28 09:08:26
【问题描述】:
我的安全 yml 如下
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_USER: ROLE_MEMBER
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout:
path: /logout
target: /
invalidate_session: false
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/profile, role: ROLE_MEMBER }
- { path: ^/admin, role: ROLE_ADMIN }
- { path: ^/group, role: ROLE_ADMIN }
我只是添加了一个名为 ROLE_MEMBER 的新角色,并只允许它访问配置文件路由。
如果配置文件设置为ROLE_USER,那么这工作正常。
我正在使用 FOSUserBundle,我有一个 fos_group 和 fos_user_group 表。下面以连接表为例。
我已成功使用此表为用户分配成员组,该组的角色只是ROLE_MEMBER。
在控制器中使用以下代码,我可以看到用户具有ROLE_MEMBER 和ROLE_USER 的角色。
$user = $this->getUser();
$user->getRoles();
返回;
array(2) { [0]=> string(11) "ROLE_MEMBER" [1]=> string(9) "ROLE_USER" }
我认为这是正确的。然而,该配置文件无法访问。如果我将配置文件更改为需要ROLE_USER,那么它可以工作并且可以访问。有趣的是,使用 Symfony 的调试部分,我可以看到实际上我的用户没有成员角色。
我是否遗漏了一个步骤来告诉 Symfony 我已分配给我的用户的角色,确保 getRoles() 返回正确的数组似乎无法按预期工作。
【问题讨论】:
标签: security symfony acl fosuserbundle roles