Laravel 5.4 用于管理员和用户角色的中间件

Mur*_*dia 2 php laravel-middleware laravel-5.4

我创建了两个名为“MustBeAdmin”和“MustBeUser”的中间件,以确保根据用户登录将它们重定向到正确的页面并限制未经授权的内容。目前一切正常,重定向也运行良好。但我在幕后写的逻辑对我来说似乎是错误的,而且奇怪的是它仍然有效。如果我写出的逻辑至少对我来说是正确的,那么它似乎并没有按预期工作。

用户表

id (1,2,3,...)
name
role (1,2,3,...)
Run Code Online (Sandbox Code Playgroud)

角色表

id (1,2,3,...)
role (Student, Admin,...)
Run Code Online (Sandbox Code Playgroud)

MustBeAdmin 中间件

public function handle($request, Closure $next)
    {
        if($request->user()->role == 2)
        {
            return $next($request);
        }
        else
        {
            return redirect('/admin/users');
        }

    }
Run Code Online (Sandbox Code Playgroud)

MustBeUser 中间件:

public function handle($request, Closure $next)
    { 
        if($request->user()->role == 1)
        {
            return $next($request);
        }
        else
        {
            return redirect('/admin/users');
        }

    }
Run Code Online (Sandbox Code Playgroud)

内核.php

'admin' => \App\Http\Middleware\MustBeAdmin::class,
'user' => \App\Http\Middleware\MustBeUser::class,
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我已经在内核中注册了中间件。

我得到的结果正是我需要的,但我怀疑中间件中的逻辑是否正确?

1 = Student
2 = Admin
Run Code Online (Sandbox Code Playgroud)

如果您在 MustBeAdmin 中间件中看到,我正在比较用户角色是否为 2(管理员),然后执行下一步($request),而在 MustBeUser 中间件中,我正在比较用户角色是否为 1(学生),然后执行下一步($request),然后我设置 else到 /Admin 目录。

我觉得不对,你觉得呢?

Sap*_*aik 5

您没有在中间件中检查经过身份验证的用户详细信息。中间件应该是这样的:

//for student 
public function handle($request, Closure $next)
{

    if ( Auth::check() && Auth::user()->role == 1 )
    {
        return $next($request);
    }

    return redirect('/admin');

}


//for admin 
public function handle($request, Closure $next)
{

    if ( Auth::check() && Auth::user()->role == 2 )
    {
        return $next($request);
    }

    return redirect('/student');

}
Run Code Online (Sandbox Code Playgroud)

您应该在这里查看我对同一主题的详细回答