Authentication 在Sylius中,如何根据用户数据选择用户角色?
在Sylius(Symfony3 bundle)中,我定制了注册表表单以添加一些字段,特别是“帐户类型”(pro或private)。根据类型,某些功能将不会启用。为了做到这一点,我考虑给用户提供不同的角色 由于身份验证是由Sylius进行的,我想知道如何覆盖默认行为以根据类型数据设置角色Authentication 在Sylius中,如何根据用户数据选择用户角色?,authentication,symfony,user-roles,sylius,Authentication,Symfony,User Roles,Sylius,在Sylius(Symfony3 bundle)中,我定制了注册表表单以添加一些字段,特别是“帐户类型”(pro或private)。根据类型,某些功能将不会启用。为了做到这一点,我考虑给用户提供不同的角色 由于身份验证是由Sylius进行的,我想知道如何覆盖默认行为以根据类型数据设置角色 谢谢你的帮助 Sylius没有内置角色或rbac系统-整个安全配置使用标准Symfony安全系统完成。因此,如果需要根据用户角色区分功能,只需基于用户模型中的$roles参数,并使用自定义防火墙覆盖Sylius
谢谢你的帮助 Sylius没有内置角色或rbac系统-整个安全配置使用标准Symfony安全系统完成。因此,如果需要根据用户角色区分功能,只需基于
用户
模型中的$roles
参数,并使用自定义防火墙覆盖Sylius安全配置,如中所述。希望能有所帮助;) 我所做的:
在Sylius中,有一个事件Sylius.customer.post\u register
在注册后触发。我创建了一个侦听器(在services.yml中定义):
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中。Tks Zaleslaw,但我不明白:ShopUser是一个Sylius实体,因此我应该能够在创建时为它指定一个自己定义的角色,否?是的,
ShopUser
是一个实体,因此您应该能够设置它,例如,表单中定义良好的选择类型
字段。如果要修改其默认角色,应覆盖应用程序中的ShopUser
实体(默认情况下,它有一个“角色\用户”角色)。只需将$roles
属性视为任何其他属性,为其创建一个字段并在表单中选择它;)我不确定我是否理解,但我不希望用户在表单中选择角色。我在表单中已经有了“type”字段,并且根据所选的值,我将一些角色授予用户。在注册表表单中,使用的模型是“Customer”,ShopUser具有“Customer”属性。我所做的是重写ShopUser、重写setCustomer,并在该方法中测试“type”属性并调用“addRole”。但我仍然拥有默认角色,而不是新角色。我看不出要覆盖哪个方法才能正确添加我的角色
public function setUserRole(GenericEvent $event)
{
$customer = $event->getSubject();
$user = $customer->getUser();
....
$this->userManager->persist($user);
$this->userManager->flush();
}