【发布时间】:2017-05-20 16:54:21
【问题描述】:
我的 Laravel 项目涉及企业及其员工。 Eloquent 的主要模型是企业、用户和角色。一个用户可以有多个角色,每个角色都有不同的业务。
在身份验证方面,Laravel 身份验证设置非常适合,但有一个例外:用户没有电子邮件地址。相反,他们的每个角色都有一个电子邮件地址,用户可以使用其中任何一个登录。
我的用户对象有 password 和 remember_token 字段。在我看来,这个对象仍然应该实现 Illuminate\Contracts\Auth\Authenticatable 接口,并且应该通过导入 Illuminate\Auth\Authenticatable 特征来实现。这听起来对吗?
说到Illuminate\Contracts\Auth\UserProvider接口:
- 我认为我可以扩展 Eloquent 提供程序实现
Illuminate\Auth\EloquentUserProvider,并仅覆盖retrieveByCredentials()方法,但我不确定。我还需要覆盖其他方法吗? - 如果我确实扩展了 Eloquent 提供程序的实现,当我在
AuthServiceProvider的boot()方法中注册新的用户提供程序时,如何注入$hasher和$model参数。这些值来自哪里(见下文)?
public function boot() { $this->registerPolicies(); Auth::provider('role', function ($app) { $hasher = ''; // ???? $model = ''; // ??? return new UserViaRoleProvider($hasher, $model); }); }
【问题讨论】:
-
视情况而定。如果您的角色是一成不变的,您可以为每个角色创建一个数据库表,而不是一个全局角色表。这样每个角色表都包含该角色的所有信息,用户表只负责每个角色共有的全局信息,例如电子邮件。这样您仍然可以使用 Auth 系统。但只是在用户和角色之间建立关系。
-
您好 Christophvh,我认为我们以不同的方式使用“角色”这个词。角色简单来说就是员工角色,比如“水管工”、“木匠”、“店员”等。所以如果我有 10,000 个用户,那么至少会有 10,000 个角色。 (用户必须始终拥有至少一个处于活动状态的角色)。
-
所有 10 000 个角色在网站上都有不同的功能吗?因为在我看来,他们都像是员工。但有不同的权限。赋予员工不同的权利,你可以通过政策和权限来解决。但也许我不明白你的用例是的。因为您可以创建管理员帐户,所以这是来自可以登录的用户的电子邮件。该用户可以拥有管理多个角色的权限,例如
-
Christophvh,角色与网站上的权限无关。我可能应该称它们为 EmploymentContracts 或 StaffMembers。