Symfony 2中的角色分配
问题描述:
我尝试将角色分配给我的控制器中的用户。例如,在数据库中,我得到这个结果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' %}
一切工作正常,但在控制器...
答
我会推荐这样做来分配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 %}
您使用的是FOSUserBundle吗?你能提供你的用户对象的一些代码,关于你的安全性的一些配置吗? – 2014-10-28 13:19:45
是的,我使用FOSUserBundle。我将我的配置添加到问题主体。 – nowiko 2014-10-28 13:25:32
您是否记录了持久保存的用户对象,注销并重新登录? – qooplmao 2014-10-28 14:52:21