Laravel 5.3中的多重身份验证

时间:2016-09-17 07:14:53

标签: laravel laravel-5.3

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

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

2 个答案:

答案 0 :(得分:5)

看起来你需要实现角色。您可以使用默认的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');
}
...

除了用户表之外,您还需要创建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

现在,您可以为您拥有的不同角色实施不同的权限。您可以使用策略或门定义权限。有关更多信息,请查看documentation

现在要将您的成员重定向到/ users / home和admins到/ 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('/');
}

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

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

答案 1 :(得分:3)

如果您需要基于防护的多重身份验证,请尝试使用此程序包进行laravel 5.3 https://github.com/Hesto/multi-auth