2014-10-28 69 views
0

我尝试将角色分配给我的控制器中的用户。例如,在数据库中,我得到这个结果a:1:{i:0;s:11:"ROLE_DRIVER";},但是当某处在我的应用我试图做到这一点Symfony 2中的角色分配

if ($securityContext->isGranted('ROLE_DRIVER')) { 

我总是假的。在剖析器中,我看到当前用户有ROLE_USER而不是_DRIVER。 我的问题在哪里?这里是我的角色分配:

$user->setRoles(array(1 => 'ROLE_DRIVER')); 

用户配置:

# FOSUserBundle configuration 
fos_user: 
    db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel' 
    firewall_name: main 
    user_class: Vputi\UserBundle\Entity\User 
    registration: 
      form: 
       type: vputi_user_registration 
    profile: 
      form: 
       type: vputi_user_profile 
    change_password: 
      form: 
       type: vputi_user_change_password 
       name: vputi_user_change_password 

当树枝我这样做:

{% if user.roles[0] == 'ROLE_DRIVER' %} 

一切工作正常,但在控制器...

+0

您使用的是FOSUserBundle吗?你能提供你的用户对象的一些代码,关于你的安全性的一些配置吗? – 2014-10-28 13:19:45

+0

是的,我使用FOSUserBundle。我将我的配置添加到问题主体。 – nowiko 2014-10-28 13:25:32

+0

您是否记录了持久保存的用户对象,注销并重新登录? – qooplmao 2014-10-28 14:52:21

回答

1

我会推荐这样做来分配ROLE_DRIVER

$user->addRole('ROLE_DRIVER'); 

或者你也可以改变你给它的值的方式:

$user->setRoles(array("ROLE_DRIVER")); 
//update user 

更新:

$user->addRole('ROLE_DRIVER'); 
$user->addRole('ROLE_OLD_DRIVER'); 

这是一样设置在同一行这两个角色:

$user->setRoles(array("ROLE_DRIVER", "ROLE_OLD_DRIVER")); 

枝条检查:

{% if app.user.hasRole('ROLE_FOO') %} 
    ... 
{% endif %} 
+0

你好,我不知道如何,但是当我今天尝试你的代码时,所有的作品!谢谢) – nowiko 2014-10-29 09:58:14

+0

嗯,奇怪它适用于一个角色,而不适用于另一个... – nowiko 2014-10-29 10:13:37

+0

你如何分配多个角色? – stevenll 2014-10-29 12:17:45