Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 在Sylius中,如何根据用户数据选择用户角色?_Authentication_Symfony_User Roles_Sylius - Fatal编程技术网

Authentication 在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(Symfony3 bundle)中,我定制了注册表表单以添加一些字段,特别是“帐户类型”(pro或private)。根据类型,某些功能将不会启用。为了做到这一点,我考虑给用户提供不同的角色

由于身份验证是由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();
    }