Laravel 5.3 中的多重身份验证

Multiple Authentication in Laravel 5.3

如何在 Laravel 5.3 中为两个不同的表(用户和管理员)设置多重身份验证。

默认情况下 Laravel 有用户模型。

看来您需要实施角色。您可以使用默认的 Laravel 用户模型,并且需要创建一个角色模型:

用户模型

...
public function role() {
    return $this->belongsToMany('App\User', 'user_roles', 'role_id', 'user_id');
}

public function inRole($role) {
    return (bool) $this->role()->where('name', '=', $role)->count();
}
...

榜样

...
public function users() {
    return $this->belongsToMany('App\Role', 'user_roles', 'user_id', 'role_id');
}
...

除了您的用户 table:

,您还需要创建 2 个 table
Table users

id | name
---------
1  | John
2  | Michael

Table roles

id | name
---------
1  | Admin
2  | Member

Table user_roles

id | user_id | role_id
----------------------
1  |    1    |    1   
2  |    2    |    1

现在您可以为您拥有的不同角色实施不同的权限。您可以使用 Policies 或 Gates 定义权限。有关如何执行此操作的更多信息,请查看 documentation.

现在要将您的成员重定向到 /users/home 并将管理员重定向到 /admin/dashboard,您可以执行以下操作:

您在 AuthServiceProvider 中定义了 adminAccess:

public function boot() {
    $this->registerPolicies();
    ...

    // Define adminAccess
    Gate::define('adminAccess', function ($user) {
        return $user->inRole('admin');
    });
}

更新: 现在你可以像这样使用中间件保护你的管理路由:

public function handle($request, Closure $next) {
    if (Auth::check() && Auth::user()->inRole('admin')) {
        return $next($request);
    }

    return redirect('/');
}

然后在Kernal.php的$routeMiddleware变量中注册中间件。然后你可以将所有管理路由放在一个组中并在那里使用中间件:

Route::group(['middleware' => 'auth']) {
    // Define your routes
}

如果您需要基于守卫的多重身份验证,请尝试此包 laravel 5.3 https://github.com/Hesto/multi-auth