Muk*_*osh 4 laravel 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();
}
...
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)
| 归档时间: |
|
| 查看次数: |
5100 次 |
| 最近记录: |