如何使用laravel创建可以通过1个或多个角色访问的中间件

时间:2018-02-08 04:03:46

标签: laravel routes middleware laravel-5.5

我有像这样的自定义中间件

enter image description here

然后这是我的路线

enter image description here

我想要

LoginVC

可以通过这4个角色进行访问,但总是失败。

任何人都可以帮助我吗?感谢

1 个答案:

答案 0 :(得分:0)

您正在将一个中间件堆叠在另一个中间,因此请求会从一个中间件传递到另一个中间件,如果发生任何故障,请求将无法进一步处理。

您需要创建另一个中间件来检查用户是否属于任何给定角色。

php artisan make:middleware RestrictedAccess

并且在中间件的handle方法中你可以做到

public function handle($request, Closure $next)
{
    $role_ids = [1, 2, 3, 4];

    if (! in_array(auth()->user()->roleId, $role_ids)) {
        abort('403');
    }

    return $next($request);
}

并将中间件添加到App\Http\Kernel.php文件

protected $routeMiddleware = [
    ...
    'auth.restricted_access' => \App\Http\Middleware\RestrictedAccess::class,
    ...
];

然后您可以将路线修改为

Route::post('facility', 'FacilityController@store')
        ->name('facility.store')
        ->middleware('auth.restricted_access');