2012-06-27 37 views
0

我使用类似于http://blog.jmoz.co.uk/symfony2-fosuserbundle-role-entitiesSymfony2的安全系统(ACCESS_CONTROL和security.context)随着数据库存储角色和FOSUserBundle

一个解决方案所以我有一个实现RoleInterface一个Role实体,我有一个设置修改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

回答

1

原因是这不起作用是因为我仍然使用同一个会话登录。注销然后再回来刷新与新角色的会话会有诀窍。 DOH!

相关问题