Добавить роль в FOSUserBundle

Я установил FOSUsrBundle. Как добавить роль от контроллера к пользователю?

Я пробовал это решение, но не работает:

$user = $this->container->get('security.context')->getToken()->getUser();
$user->addRole('ROLE_USER');

person dev_symfo    schedule 03.07.2012    source источник
comment
Роли добавляются при регистрации. Вам нужно будет изменить роль через консоль.   -  person Dave Mascia    schedule 03.07.2012
comment
Что значит не работает? Откуда ты знаешь, что это не работает? Вы пытаетесь добавить ее только для текущего запроса или хотите сохранить эту роль в базе данных?   -  person MDrollette    schedule 04.07.2012
comment
изменить роль с консоли, это нормально, но я хотел бы изменить роль с контроллера (сохранить эту роль в базе данных), потому что у меня есть интерфейсный администратор для управления всеми пользователями (изменить роль, изменить имя, адрес электронной почты...)   -  person dev_symfo    schedule 04.07.2012


Ответы (1)


Просто добавьте поле выбора роли со списком ролей в форму userType.

$builder->add('roleList', 'choice', array(
'choices'   => array(
    'ROLE_ADMIN'   => 'ROLE_ADMIN',
    'ROLE_USER' => 'ROLE_USER',
),
'property_path' => false,
'multiple'  => true,
))

И в контроллере просто добавьте этот код, чтобы добавить роль пользователю

$formData = $this->getRequest()->request->get($form->getName());           
$roles = $formData['roleList'];

foreach($roles as $key => $value)
{
 $user->addRole($value);
}

Я думаю, этого достаточно для назначения ролей в пользовательском интерфейсе.

person Abdullah Kiser    schedule 08.07.2012
comment
На самом деле вам даже не нужно вручную добавлять роли. Просто переименуйте roleList в roles, а FOSUserBundle позаботится о добавлении ролей для вас, когда вы добавляете пользователя, то есть $userManager->updateUser($formData->getData()). Это сработало для меня - person Sylvan D Ash; 12.08.2015