将Laravel多身份验证用户视为唯一的用户类

时间:2018-10-22 08:14:16

标签: laravel authentication laravel-5 orm eloquent

几天来我一直在努力解决这个问题,尽管到处搜索,但找不到合理的解决方案。

我的项目中需要多种类型的用户(管理员,客户),因为每种类型的后端逻辑都完全不同。因此,我决定在laravel中使用多重身份验证方法(对于这些情况,哪种AFAIK是最佳解决方案)。因此,对于每种类型(以及数据库中的多个表),我有多个用户类,包括AdminUser类。 AdminAuthUserAuth类管理“登录”和“注册”逻辑,并且使用中间件处理路由。

到目前为止,没有问题。问题是我需要在另一个类中使用单个用户类。例如,考虑消息传递逻辑(并且有许多类似的用例):

消息类模型应具有:

protected $fillable = [
    'from_id', 'to_id', 'content', 'state'
];

 public function sender(){
     return $this->belongsTo(**User::class**);
 }

 public function receiver(){
     return $this->belongsTo(**User::class**);
 }
 ...

在上述模型中,我需要为发送者和接收者指定 User :: class ,它们可以是管理员或用户。因此,我该如何告诉Eloquent使用这两种模型。可能吗如果没有,这里的解决方案是什么?

例如,我考虑过使用名为Person的更高级别的类来保存Admin或User对象实例,但是这种方式ORM无法设法自动从适当的表中检索或存储用户。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我建议您使用以下准则来处理此类功能;为每种用户类型创建一个模型,但是所有这些用户都应通过保留用户ID与Laravel的默认用户类建立关系。同样,在用户类中保留常规属性,在每个子类中保留特定属性,例如客户可以拥有地址,管理员可以拥有电话号码,而用户名之类的常见事物可以保留在用户模型中。然后,您将不需要使用多种形式登录,当用户登录时,您将相应地直接重定向到默认用户记录中的用户类型。现在针对您的消息传递问题,使用用户默认用户模型在消息中建立关系,如上所示。然后根据用户的类型进行防御,为他提供聊天中的不同权限或功能。