Не понял, почему надо 3 параметра, а передаётся 1? PHP: namespace App\Http\Middleware; use Closure; class CheckRole { public function handle($request, Closure $next, $role) { if (! $request->user()->hasRole($role)) { // Redirect... } return $next($request); } } Route::put('post/{id}', function ($id) { /* * Если пользователь редактор * то дать ему доступ */ })->middleware('role:editor'); в request попадает post/{id}, в role попадает role:editor. Получается, что уже 2. Не понял, как работает $next Наверно получается, что в next попадает то же post/{id}', то есть если всё хорошо, то обновление сработает и будет отработан метод, который сделан для put('post/{id}'? За это и отвечает next?
$next - это ссылка на функцию, которая должна отработать следующей после данного посредника. Но посредник сам решает, когда её надо вызвать. Часть параметров передаёт сам Laravel, тебе за это беспокоиться не надо.
$request один на всей цепочке и попадает во все мидлвары. Первые два аргумента обязательные для любого middleware. Пользовательский только role, вот он один и прописывается в вызове. $next($response); - это обычный способ продолжить (не прервать) выполнение запроса вплоть до контроллера или до замыкания из роута. --- Добавлено --- Вот здесь всё написано https://laravel.com/docs/5.6/middleware