在 Laravel 5.3 中使用中间件

Using middleware in Laravel 5.3

我正在尝试在 Laravel 5.3 中创建一个中间件来检查用户是否是管理员,因此我可以将某些路由限制为仅供管理员使用。

我的中间件:

<?php

namespace App\Http\Middleware;

use Closure;

class IsAdmin
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
    public function handle($request, Closure $next)
    {
        if( !\Auth::user()->hasRole('admin') ) {
            return redirect('login');
        }

        return $next($request);
    }
}

我在内核中注册它,将 ti 添加到受保护的,如下所示:

protected $routeMiddleware = [
     ....
     'isadmin' => App\Http\Middleware\IsAdmin::class,
]

然后我尝试使用以下方法保护我的路线:

Route::resource('user', 'UserController')->middleware('isadmin');

但是我从我的路由文件中得到错误:

FatalThrowableError in web.php line 103:
Call to a member function middleware() on null

您应该使用 ::group():

应用中间件
Route::group(['middleware' => 'isadmin'], function () {
    Route::resource('user', 'UserController');
});

UserController构造函数中你可以使用:

$this->middleware('isadmin');

文档 - Controller Middleware