Php 如何使Laravel 6授权检查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();

我试图编辑此教程,但没有成功。如果您只有一个用户和一个管理员,则可以使用此功能。我需要做的是检查4种可能的用户类型


您可以使用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,它将不是概念性的。我应该使用什么?它正在工作,但我仍然使用布尔值。请在问题中添加一个链接,而不是外部站点。感谢您花时间回答我的问题。我现在将更改代码。