Промежуточное ПО Laravel 5 работает даже после ограничения - PullRequest
0 голосов
/ 04 мая 2018

У меня есть промежуточное ПО, которое ограничивает доступ к маршруту, если ему не разрешен маршрут. Я добавил это в: kernel.php

 protected $middleware = [ \App\Http\Middleware\MyMiddlware::class,]


 public function handle($request, Closure $next)
{
    $response = $next($request);
    $currentRoute = $request->route()->getName();
    $accessibleMenu = $this->menu->where('route_name', $currentRoute)->first();

  dd('middleware');

    if ($this->auth->check() && !is_null($accessibleMenu)) {

        $userRole = $request->user()->role()->first()->id;


        if (!is_null($userRole ) && $userRole ==1) {

            return $response;
        }
    }

    return Response::make(view('noPermission'), 404);
}

Маршрут:

   Route::get('menu/list','MenuController@index')->name('menu-list');

функция контроллера ::

    public function index($parent_id = null)
{
     dd('executed');
    $menus = $this->menu->orderBy('id', 'DESC')->paginate(5000);

    return view('menu.index', compact('menus'));
}

Теперь по-настоящему: если идентификатор роли равен 2, промежуточное программное обеспечение должно возвращать представление 404 без выполнения маршрута. Но он печатает выполненную строку на экране!

1.Если я удалил или прокомментировал:

 $response = $next($request);

возвращает

Call to a member function getName() on null
  1. Если я перенесу регистрацию маршрута на

    'web' => [ \ App \ Http \ Middleware \ EncryptCookies :: класс, \ Осветите \ Cookie \ Middleware \ AddQueuedCookiesToResponse :: класс, \ Осветите \ Session \ Middleware \ StartSession :: класс, // \ Illuminate \ Session \ Middleware \ AuthenticateSession :: class, \ Осветите \ View \ Middleware \ ShareErrorsFromSession :: класс, \ App \ Http \ Middleware \ VerifyCsrfToken :: класс, \ Осветите \ Routing \ Middleware \ SubstituteBindings :: класс, \ App \ Http \ MiddleWare \ Activity :: класс, \ App \ Http \ Middleware \ MyMiddlware :: класс, ]

и комментарий:

 $response = $next($request);

затем выводит на экран "middleware" и промежуточное программное обеспечение работает

У меня вопрос, почему промежуточное ПО разрешает выполнение функции, если я использую это

 $response = $next($request);

в первой функции дескриптора? Почему middlware не работает и возвращает ноль для getName(), если я использую в protected $middleware = [] массив?

laravel сообщает в kernel.php для - protected $ middleware = []: * Эти промежуточные программы запускаются при каждом запросе к вашему приложению.

почему это разрешено даже после того, как я ограничил доступ?

1 Ответ

0 голосов
/ 04 мая 2018

Мне было трудно читать через это, однако я думаю вы хотите изменить 2 строки:

удалить $response = $next($request);

изменить return $response; на return $next($request);

...