【问题标题】:In Sylius, how to choose the user role depending on user data?在 Sylius 中,如何根据用户数据选择用户角色?
【发布时间】:2017-06-01 06:56:47
【问题描述】:

在 Sylius(Symfony3 捆绑包)中,我自定义了注册表以添加一些字段,特别是“帐户类型”(专业或私人)。根据类型,某些功能将不会启用。为此,我考虑赋予用户不同的角色。

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

感谢您的帮助!

【问题讨论】:

    标签: authentication symfony user-roles sylius


    【解决方案1】:

    Sylius 没有内置角色或 rbac 系统 - 整个安全配置是使用标准 Symfony 安全系统完成的。因此,如果您需要根据用户角色区分功能,只需基于 User 模型中的 $roles 参数,并使用您的自定义防火墙覆盖 Sylius 安全配置,如 Symfony tutorial 中所述。希望它会有所帮助;)

    【讨论】:

    • Tks Zaleslaw,但我不明白:ShopUser 是一个 Sylius 实体,所以我应该能够在创建时给它一个我自己定义的角色,不是吗?
    • 是的,ShopUser 是一个实体,因此您应该能够通过例如在表单中明确定义的 ChoiceType 字段来设置它。如果您想修改它的默认角色,您应该在您的应用程序中覆盖ShopUser 实体(默认情况下它有一个“ROLE_USER”角色)。只需将$roles 属性视为任何其他属性,为其创建一个字段并在表单中选择它;)
    • 我不确定我是否理解,但我不希望用户在表单中选择角色。我已经在表单中有“类型”字段,并且根据选择的值,我向用户授予了一些角色。在注册表单中,使用的模型是“客户”,ShopUser 有一个“客户”属性。我所做的是覆盖 ShopUser,覆盖 setCustomer,并在该方法中测试“type”属性并调用“addRole”。但我仍然拥有默认角色,而不是新角色。我看不到要覆盖哪个其他方法来正确添加我的角色
    【解决方案2】:

    我做了什么:

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

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 2021-11-16
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      相关资源
      最近更新 更多