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
如何在 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 个 tableTable 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