Symfony 多种用户类型和自定义用户提供者

Symfony multiple user types and custom user provider

我正在为类似于 Uber 的应用程序设计架构和数据库。我坚持设计 User 实体和创建自定义用户提供程序。有Userdrivercustomer两种类型。用户可以将他的电子邮件注册为 drivercustomer.

是否有好的读物或项目可以让我了解创建具有多种用户类型的应用程序的最佳方法。

这是我目前想到的:

我从抽象 User 实体开始

/**
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({"customer" = "Customer", "driver" = "Driver"})
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 */
abstract class User {
     /**
      * @ORM\Id()
      * @ORM\GeneratedValue()
      * @ORM\Column(type="integer")
      */
      protected $id;
}

Customer class 看起来像:

class Customer extends User
{
  /**
   * @ORM\Id()
   * @ORM\GeneratedValue()
   * @ORM\Column(type="integer")
   */
  protected $id;

  /**
   * @var string
   *
   * @ORM\Column(type="string", nullable=false, name="email", unique=true)
   */
  protected $email;

Driver class:

 class Driver extends User
   {
  /**
   * @ORM\Id()
   * @ORM\GeneratedValue()
   * @ORM\Column(type="integer")
   */
  protected $id;

  /**
   * @var string
   *
   * @ORM\Column(type="string", nullable=false, name="email", unique=true)
   */
  protected $email;

但是我不确定这个用户实体结构是否是个好主意。但是如果我继续使用这个数据库模型,什么是用户授权的最佳策略? 我打算使用 FOS oAuth 来确保安全。为每种类型的 User 设置单独的防火墙是否更好?

您应该考虑一种基于角色的方法,而不是将您的设计基于类型

如果您需要多态查询和关系,联合策略可能是您的最佳选择

这样,用户可以将他的电子邮件注册为 driver 和客户。 用户 A 具有角色 [DRIVER_ROLE、USER_ROLE]