FOSUserBundle регистрация с ролью по выбору. Как реализовать?

Из заголовка, думаю, все понятно, но поясню.

Есть Symfony с FOSUSerBundle и при регистрации я хочу дать выбор пользователю какую роль он предпочитает. И я говорю не о стандартных ролях типа ROLE_USER и ROLE_ADMIN.

Мне нужно создать роли. Как и где?

Далее нужно при регистрации сделать radio переключатель и позволить выбирать пользователю роль. Как?

С переключателем справлюсь, но как роль задать не знаю.

Спасибо
  • Вопрос задан
  • 283 просмотра
Пригласить эксперта
Ответы на вопрос 3
GTRxShock
@GTRxShock
SA
Роли это своего рода ярлыки у пользователей, сами по себе ничего не значат и являются всего лишь текстовым значением, но имея возможность наследования и обыгрывая различия доступа в коде, вы можете все что угодно)
security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    role_hierarchy:
        ROLE_MANAGER:       ROLE_USER
        ROLE_HEAD_MANAGER:  ROLE_MANAGER
        ROLE_ADMIN:         [ROLE_HEAD_MANAGER, ROLE_SONATA_ADMIN, ROLE_ALLOWED_TO_SWITCH]
        ROLE_SUPER_ADMIN:   [ROLE_ADMIN]
Ответ написан
Комментировать
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Полагаю, вам нужны не роли, а группы.
Либо если, всё-таки, роли, то сюда.
Ответ написан
Комментировать
@Vaalel
Добавь поле в entity твоего пользователя, перезагрузи форму регистрации и готово.
<?php
namespace UserBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class RegistrationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('Name', 'text', array('label'=>'First name'));
        $builder->add('Surname', 'text', array('label'=>'Last name'));
        $builder->add('YearOfBirth', 'text', array('label'=>'Year of birth'));
        $builder->add('Type',null, array('label'=>"Role",'placeholder'=>'Choose role'));
        $builder->add('Country', 'text', array('label'=>'Your country'));
    }
    public function getParent()
    {
        return 'fos_user_registration';
    }
    public function getName()
    {
        return 'app_user_registration';
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы