在Sylius中,如何根据用户数据选择用户角色?

时间:2017-01-17 09:23:53

标签: authentication symfony user-roles sylius

在Sylius(Symfony3软件包)中,我已经自定义了注册表单以添加一些字段,特别是'类型的帐户' (亲或私人)。根据类型,某些功能将无法启用。为了做到这一点,我在考虑给用户不同的角色。

由于Sylius进行了身份验证,我想知道如何根据类型数据覆盖默认行为来设置角色?

感谢您的帮助!

2 个答案:

答案 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保存它。