Я пытаюсь назначить роль пользователю в моем контроллере. Например в базе данных я получил этот результат a:1:{i:0;s:11:"ROLE_DRIVER";}
, но когда где-то в моем приложении я пытаюсь сделать это
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 %}
Других решений пока нет …