首页 文章

Laravel 5中间件即使在限制之后也会执行

提问于
浏览
0

我有一个中间件,如果路由不允许他限制访问路由 . 我添加了: 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'));
}

现在为real:如果role id为2,则中间件应返回404视图而不执行路由 . 但它在屏幕上打印执行的字符串!

1.如果我删除或评论:

$response = $next($request);

它返回

Call to a member function getName() on null
  • 如果我将路线注册移至

'web'=> [\ App \ Http \ Middleware \ EncryptCookies :: class,\ Illuminate \ Cookie \ Middleware \ AddQueuedCookiesToResponse :: class,\ Illuminate \ Session \ Middleware \ StartSession :: class,// \ Illuminate \ Session \ Middleware \ AuthenticateSession :: class,\ Illuminate \ View \ Middleware \ ShareErrorsFromSession :: class,\ App \ Http \ Middleware \ VerifyCsrfToken :: class,\ Illuminate \ Routing \ Middleware \ SubstituteBindings :: class,\ App \ Http \ Middleware \ Activity :: class,\ App \ Http \ Middleware \ MyMiddlware :: class,],

和评论:

$response = $next($request);

然后屏幕打印“中间件”和中间件工作

我的问题是为什么middlware允许函数执行,如果我使用它

$response = $next($request);

在第一个句柄功能?如果在 protected $middleware = [] 数组中使用,为什么middlware不起作用并为 getName() 返回null?

laravel在kernel.php中说 - protected $ middleware = []:*这些中间件在每次请求应用程序时运行 .

为什么即使我限制访问后这也允许?

1 回答

  • 1

    通过这个阅读我有困难,但我认为你想改变2行:

    删除 $response = $next($request);

    return $response; 改为 return $next($request);

相关问题