我正在为类似Uber的应用程序设计架构和数据库。我一直在设计User
实体和创建自定义用户提供程序。CCD_ 2、CCD_ 3和CCD_。用户可以将自己的电子邮件注册为driver
和customer
。
有没有好的读物或项目可以让我了解创建具有多种用户类型的应用程序的最佳方法。
这就是我目前想到的:
我从抽象User
实体开始
/**
* @ORMInheritanceType("JOINED")
* @ORMDiscriminatorColumn(name="discr", type="string")
* @ORMDiscriminatorMap({"customer" = "Customer", "driver" = "Driver"})
* @ORMEntity(repositoryClass="AppRepositoryUserRepository")
*/
abstract class User {
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
protected $id;
}
并且Customer
类看起来像:
class Customer extends User
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
protected $id;
/**
* @var string
*
* @ORMColumn(type="string", nullable=false, name="email", unique=true)
*/
protected $email;
Driver
类:
class Driver extends User
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
protected $id;
/**
* @var string
*
* @ORMColumn(type="string", nullable=false, name="email", unique=true)
*/
protected $email;
但是,我不确定这个用户实体结构是否是个好主意。但如果我继续使用这个数据库模型,用户授权的最佳策略是什么?为了安全起见,我计划使用FOS oAuth。为每种类型的User
设置单独的防火墙更好吗?
您应该考虑基于角色的方法,而不是基于类型的设计
如果您需要多态查询和关系,联合策略可能是的最佳选择
像这样,用户可以将他的电子邮件注册为驱动程序和客户。用户A具有角色[DRIVER_ROLE,User_ROLE]