在Sylius(Symfony3软件包)中,我已经自定义了注册表单以添加一些字段,特别是'类型的帐户' (亲或私人)。根据类型,某些功能将无法启用。为了做到这一点,我在考虑给用户不同的角色。
由于Sylius进行了身份验证,我想知道如何根据类型数据覆盖默认行为来设置角色?
感谢您的帮助!
答案 0 :(得分:0)
Sylius没有内置角色或rbac系统 - 整个安全配置是使用标准Symfony安全系统完成的。因此,如果您需要根据用户角色区分功能,只需基于$roles
模型中的User
参数,并使用自定义防火墙覆盖Sylius安全配置,如Symfony tutorial中所述。希望它会有所帮助;)
答案 1 :(得分:0)
我做了什么:
在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保存它。