我使用的解决方案类似于http://blog.jmoz.co.uk/symfony2-fosuserbundle-role-entities
所以我有一个实现Role
的{{1}}实体,并且我有一个修改过的RoleInterface
实体,它被设置为与角色有一个ManyToMany关系。
这允许我使用这样的代码
User
然后,我可以检查用户是否具有
角色$user = $this->get('security.context')->getToken()->getUser();
$role = new Role('ROLE_TEST');
$user->addRole($role);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($role);
$em->persist($user);
$em->flush();
此解决方案没问题,但我需要访问安全上下文并使用如下代码:
$user = $this->get('security.context')->getToken()->getUser();
if($user->hasRole('ROLE_TEST')){
//do stuff...
}
在security.yml cofig文件中,我想使用access_control代码,如下所示:
if($this->get('security.context')->isGranted('ROLE_TEST')){
//do stuff...
}
我需要一个自定义用户管理器吗?分配给数据库中用户的角色不会转移到内置的Symfony安全系统。
换句话说,当我查看探查器的安全部分时,它显示用户被分配到access_control:
- { path: ^/test$, role: ROLE_TEST }
,但我希望得到它,以便系统也能识别我在登录用户的数据库,例如Roles [ROLE_USER]
。
答案 0 :(得分:1)
这不起作用的原因是因为我仍然使用相同的会话登录。注销然后再次返回以刷新具有新角色的会话就可以了。 DOH!