Sylius中如何根据用户数据选择用户角色?
In Sylius, how to choose the user role depending on user data?
在 Sylius(Symfony3 捆绑包)中,我自定义了注册表单以添加一些字段,特别是 'type of account'(专业或私人)。根据类型,某些功能将不会启用。为了做到这一点,我正在考虑给用户不同的角色。
由于身份验证是由 Sylius 完成的,我想知道如何覆盖默认行为以根据类型数据设置角色?
感谢您的帮助!
Sylius 没有 built-in 角色或 rbac 系统 - 整个安全配置是使用标准 Symfony 安全系统完成的。因此,如果您需要根据用户角色区分功能,只需基于 User
模型的 $roles
参数,并使用自定义防火墙覆盖 Sylius 安全配置,如 Symfony tutorial 中所述。希望对您有所帮助 ;)
我做了什么:
在 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 对象作为事件的 'subject' 获取:
public function setUserRole(GenericEvent $event)
{
$customer = $event->getSubject();
$user = $customer->getUser();
....
$this->userManager->persist($user);
$this->userManager->flush();
}
然后我可以修改 $user(添加我的角色)并使用 ShopUserManager 保存它。
在 Sylius(Symfony3 捆绑包)中,我自定义了注册表单以添加一些字段,特别是 'type of account'(专业或私人)。根据类型,某些功能将不会启用。为了做到这一点,我正在考虑给用户不同的角色。
由于身份验证是由 Sylius 完成的,我想知道如何覆盖默认行为以根据类型数据设置角色?
感谢您的帮助!
Sylius 没有 built-in 角色或 rbac 系统 - 整个安全配置是使用标准 Symfony 安全系统完成的。因此,如果您需要根据用户角色区分功能,只需基于 User
模型的 $roles
参数,并使用自定义防火墙覆盖 Sylius 安全配置,如 Symfony tutorial 中所述。希望对您有所帮助 ;)
我做了什么:
在 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 对象作为事件的 'subject' 获取:
public function setUserRole(GenericEvent $event)
{
$customer = $event->getSubject();
$user = $customer->getUser();
....
$this->userManager->persist($user);
$this->userManager->flush();
}
然后我可以修改 $user(添加我的角色)并使用 ShopUserManager 保存它。