0

我正在使用类似于http://blog.jmoz.co.uk/symfony2-fosuserbundle-role-entities的解决方案

因此,我有一个Role实现的实体,RoleInterface并且我有一个修改后的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...
}

这个解决方案没问题,但我需要访问安全上下文并使用如下代码:

if($this->get('security.context')->isGranted('ROLE_TEST')){
   //do stuff...
}

在 security.yml cofig 文件中,我想像这样使用 access_control 代码:

access_control:
   - { path: ^/test$, role: ROLE_TEST }

我需要一个自定义用户管理器吗?在数据库中分配给用户的角色不会被转移到内置的 Symfony 安全系统中。

换句话说,当我查看分析器的安全部分时,它显示用户被分配到Roles [ROLE_USER],但我希望得到它,这样系统也会识别我在数据库中为登录用户设置的角色,例如ROLE_TEST.

4

1 回答 1

1

这不起作用的原因是因为我仍然使用相同的会话登录。注销然后重新登录以使用新角色刷新会话就可以了。哦!

于 2012-06-28T12:56:38.657 回答