gpt4 book ai didi

laravel - Laravel 5.3 中的多重身份验证

转载 作者:行者123 更新时间:2023-12-02 13:28:58 25 4
gpt4 key购买 nike

如何在 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');
}
...

除了用户表之外,您还需要创建 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 并将管理员重定向到/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 - Laravel 5.3 中的多重身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39543967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com