我正在为类似于Uber的应用程序设计体系结构和数据库。而且我坚持设计User
实体并创建自定义用户提供程序。 User
driver
和customer
有2种类型。用户可以将其电子邮件同时注册为driver
和customer
。
是否有不错的阅读材料或项目,可以使我了解创建具有多种用户类型的应用程序的最佳方法。
这是我目前想出的:
我从抽象的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 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 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
设置单独的防火墙是否更好?
答案 0 :(得分:2)
您应该考虑基于角色的方法,而不是基于类型
如果您需要多态查询和关系,则合并策略可能是您的最佳选择
这样,用户可以将其电子邮件注册为驱动程序和客户。 用户A具有[DRIVER_ROLE,USER_ROLE]角色