В Sylius, как выбрать роль пользователя в зависимости от пользовательских данных?

В Sylius (пакет Symfony3) я настроил форму регистрации для добавления некоторых полей, в частности типа учетной записи (pro или private). В зависимости от типа некоторые функции не будут включены. Чтобы сделать это, я думал о том, чтобы дать пользователям разные роли.

Поскольку проверка подлинности выполняется Sylius, мне было интересно, как переопределить поведение по умолчанию, чтобы установить роль в соответствии с типом данных?

Спасибо за вашу помощь!

2 ответа

Решение

Что я сделал:

В Sylius, есть событие sylius.customer.post_register уволен после регистрации. Я создал слушатель (определенный в services.yml):

app.registration_listener:
        class: AppBundle\EventListener\RegistrationListener
        tags:
            - { name: kernel.event_listener, event: sylius.customer.post_register, method: setUserRole }
        arguments:
            - "@sylius.manager.shop_user"

ShopUserManager передается в качестве аргумента методу setUserRole.

public function __construct(ObjectManager $userManager) {
        $this->userManager = $userManager;
    }

В слушателе я получаю объект $user как "субъект" события:

public function setUserRole(GenericEvent $event)
    {
        $customer = $event->getSubject();
        $user = $customer->getUser();
        ....
        $this->userManager->persist($user);
        $this->userManager->flush();
    }

Затем я могу изменить $user (добавить свою роль) и сохранить его с ShopUserManager.

У Sylius нет встроенных ролей или системы rbac - вся настройка безопасности выполняется с помощью стандартной системы безопасности Symfony. Так что если вам нужно дифференцировать функциональность в зависимости от роли пользователя, просто опирайтесь на $roles параметр из User смоделируйте конфигурацию безопасности Sylius с помощью пользовательских брандмауэров, как сказано в руководстве по Symfony. Надеюсь, это поможет;)

Другие вопросы по тегам