将 Laravel 多身份验证用户视为唯一的用户类
Posted
技术标签:
【中文标题】将 Laravel 多身份验证用户视为唯一的用户类【英文标题】:Treat Laravel multi auth users as a unique user class 【发布时间】:2019-03-26 06:25:36 【问题描述】:我已经为这个问题苦苦挣扎了几天,我到处搜索,但找不到合乎逻辑的解决方案。
我的项目中需要多种类型的用户(管理员、客户),因为每种类型都需要完全不同的后端逻辑。所以我决定在 laravel 中使用多重身份验证方法(对于这些情况,AFAIK 是最好的解决方案)。因此,我为每种类型(以及 DB 中的多个表)提供了多个用户类,包括 Admin
和 User
类。 AdminAuth
和 UserAuth
类管理登录和注册逻辑,并且使用中间件处理路由。
到目前为止,没有任何问题。问题是我需要在另一个类中使用单个用户类。例如考虑消息传递逻辑(并且有许多类似的用例):
一个消息类模型应该有:
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】:我建议您使用以下指南来处理此类功能;为每个用户类型创建一个模型,但所有这些都应该通过保留用户的 id 与 Laravel 的默认用户类建立关系。此外,在用户类中保留通用属性,在每个子类中保留特定属性,例如客户可以有地址,管理员可以有电话号码,而用户名等常见内容可以保留在用户模型中。然后您将不需要多个表单进行登录,当用户登录时,您会相应地重定向到默认用户记录中的用户类型。现在对于您的消息传递问题,使用默认用户模型在消息中建立关系,如上所示。然后根据用户的类型进行辩护,在聊天中授予他不同的权限或功能。
【讨论】:
以上是关于将 Laravel 多身份验证用户视为唯一的用户类的主要内容,如果未能解决你的问题,请参考以下文章