Php 如何使Laravel 6授权检查4种不同的用户类型
我试图编辑此教程,但没有成功。如果您只有一个用户和一个管理员,则可以使用此功能。我需要做的是检查4种可能的用户类型Php 如何使Laravel 6授权检查4种不同的用户类型,php,laravel,Php,Laravel,我试图编辑此教程,但没有成功。如果您只有一个用户和一个管理员,则可以使用此功能。我需要做的是检查4种可能的用户类型 您可以使用roles and permissions package为注册用户分配角色,Spatial/laravel permission是我的最佳选择。然后,您可以根据用户的角色重定向用户 教程中的代码 public function login(Request $request) { ... $user = auth()->user();
您可以使用roles and permissions package为注册用户分配角色,
Spatial/laravel permission
是我的最佳选择。然后,您可以根据用户的角色重定向用户
教程中的代码
public function login(Request $request)
{
...
$user = auth()->user();
if ($user->hasRole('admin')) {
return redirect()->route('admin.home');
}else if ($user->hasRole('modertor')){
return redirect()->route('moderator.home');
}else if ($user->hasRole('translator')){
return redirect()->route('translator.home');
}else{
return redirect()->route('home');
}
}
根据您对Ruben Danielyan答案的评论,您似乎试图通过使用1和2来使用
is_admin
作为您的角色标识符,但是如果您使用教程的迁移,这将不起作用,因为is_admin是一个布尔值。因此,您必须在迁移文件中更改为$table->integer('is_admin')->nullable()代码>
编辑:
正如porloscerros所说,您可能还应该将is\u admin
重命名为更合适的名称,如role\u id
或role\u category
,因为以is\u
开头的字段通常用于布尔值,以表示记录是否处于某个特定状态或类别(例如是活动的、隐藏的或打折的)很简单
你所要做的就是增加一个守卫
打开app/Providers/AuthServiceProvider.php
并更改引导方法
public function boot(){
$this->registerPolicies();
Auth::viaRequest('admin', function ($request) {
return Admin::where('token', $request->token)->first();
});
}
之后,在config/auth.php
中将此保护连接到您的模型
...
'guards' => [
'web' => ['driver' => 'session','provider' => 'users',],
'admin' => ['driver' => 'session','provider' => 'admins',],
],
...
'providers' => [
'users' => ['driver' => 'eloquent','model' => App\User::class,],
'admins' => ['driver' => 'eloquent','model' => App\Admin::class,],
],
...
现在,您可以在路由上使用
auth:admin
中间件来检查admin
在到达该路由之前是否已登录。空间是扩展吗?很抱歉第一次遇到这种情况。使用未定义的常量“home”-假定为“home”(这将在未来的PHP版本中引发错误)这是我实现它时的错误。这是我现在的代码if(auth()->尝试(数组('email'=>$input['email'],'password'=>$input['password'])){if(auth()->user()->is_admin==1){return redirect()->route('admin.home');}elseif(auth()->user()->is_admin==2){return redirect()->route('admin.home');}else{return redirect()->route('home');}else{
is_admin列是布尔值,它只接受0或1,如果您使用is_admin=2,它将不是概念性的。我应该使用什么?它正在工作,但我仍然使用布尔值。请在问题中添加一个链接,而不是外部站点。感谢您花时间回答我的问题。我现在将更改代码。