У меня есть промежуточное ПО, которое ограничивает доступ к маршруту, если ему не разрешен маршрут. Я добавил это в: 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
Если я перенесу регистрацию маршрута на
'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 = []:
* Эти промежуточные программы запускаются при каждом запросе к вашему приложению.
почему это разрешено даже после того, как я ограничил доступ?