Php Symfony多用户类型和自定义用户提供程序

Php Symfony多用户类型和自定义用户提供程序,php,symfony,fosuserbundle,symfony4,fosoauthserverbundle,Php,Symfony,Fosuserbundle,Symfony4,Fosoauthserverbundle,我正在为一个类似Uber的应用程序设计架构和数据库。我一直致力于设计用户实体和创建自定义用户提供者。有两种类型的用户驱动程序和客户。用户可以将其电子邮件注册为驱动程序和客户 是否有好的阅读材料或项目,我可以从中了解创建具有多种用户类型的应用程序的最佳方法 这就是我目前的想法: 我从抽象的Userentity开始 /** * @ORM\InheritanceType("JOINED") * @ORM\DiscriminatorColumn(name="discr", type="string"

我正在为一个类似Uber的应用程序设计架构和数据库。我一直致力于设计
用户
实体和创建自定义用户提供者。有两种类型的
用户
驱动程序
客户
。用户可以将其电子邮件注册为
驱动程序
客户

是否有好的阅读材料或项目,我可以从中了解创建具有多种用户类型的应用程序的最佳方法

这就是我目前的想法:

我从抽象的
User
entity开始

/**
 * @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 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;
驱动程序
等级:

 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;
然而,我不确定这种用户实体结构是否是个好主意。但是,如果我继续使用这种db模型,那么用户授权的最佳策略是什么?
我计划使用FOS oAuth进行安全保护。为每种类型的
用户设置单独的防火墙是否更好

> P>您应该考虑基于角色的方法,而不是基于类型

的设计。 如果您需要多态查询和关系,那么连接策略可能是您的最佳选择

这样,用户可以将其电子邮件注册为司机和客户。
用户A具有角色[ DRIVILIGRIGN,USER角色]

您应该考虑基于角色的方法而不是基于类型

的设计 如果您需要多态查询和关系,那么连接策略可能是您的最佳选择

这样,用户可以将其电子邮件注册为司机和客户。
用户A有角色[DRIVER\u ROLE,User\u ROLE]

为了避免新Symfony用户的误导/打字错误,最好在
角色驱动程序
角色客户
中更正您的示例,因为在Symfony中,分配给用户的每个角色都必须以
角色
前缀开头。您好,谢谢您的回复。这很有帮助。我还有一个问题要问。如果用户有
aboutMe
属性需要根据他切换到的配置文件(驱动程序或客户)进行更改怎么办?那么最好将这两类用户分开。关于如何使用相关防火墙处理此问题的一点阅读:为了避免新Symfony用户的误导/打字错误,最好在
ROLE\u DRIVER
ROLE\u CUSTOMER
中更正您的示例,因为在Symfony中,分配给用户的每个角色都必须以
ROLE\u
前缀开头。您好,谢谢您的回复。这很有帮助。我还有一个问题要问。如果用户有
aboutMe
属性需要根据他切换到的配置文件(驱动程序或客户)进行更改怎么办?那么最好将这两类用户分开。有关使用相关防火墙处理此问题的一点阅读: