В 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. Надеюсь, это поможет;)