Laravel 5.3中的多重身份验证

Muk*_*osh 4 laravel laravel-5.3

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

默认情况下,Laravel具有用户模型.

Gad*_*hev 6

看起来你需要实现角色.您可以使用默认的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();
}
...
Run Code Online (Sandbox Code Playgroud)

榜样

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

除了用户表之外,您还需要创建2个表:

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
Run Code Online (Sandbox Code Playgroud)

现在,您可以为您拥有的不同角色实现不同的权限.您可以使用策略或门定义权限.有关如何执行此操作的详细信息,请查看文档.

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

您在AuthServiceProvider中定义adminAccess:

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

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

更新: 现在您可以使用中间件来保护您的管理路由,如下所示:

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

    return redirect('/');
}
Run Code Online (Sandbox Code Playgroud)

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

Route::group(['middleware' => 'auth']) {
    // Define your routes
}
Run Code Online (Sandbox Code Playgroud)