当前位置: 首页 > 知识库问答 >
问题:

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

皮自明
2023-03-14

我有一个中间件,它可以在不允许他访问路由的情况下限制对路由的访问。我把它添加到: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'));
}

现在说真的:如果角色id为2,中间件应该返回404视图而不执行路由。但它打印执行字符串在屏幕上!

1.如果我删除或评论:

 $response = $next($request);

它返回

Call to a member function getName() on null

如果我把路线登记移到

“网络”=

和评论:

 $response = $next($request);

然后屏幕显示“中间件”,中间件工作

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

 $response = $next($request);

在第一个手柄功能?为什么中间件不工作并返回null的getName()如果我在protected$middleware = []数组中使用?

Laravel说kernel.phpfor-protected$middleware = []: * 这些中间件在每次对应用程序的请求中运行。

为什么即使在我限制了访问权限后也允许这样做?

共有1个答案

徐秋月
2023-03-14

我读这篇文章有困难,但我认为您需要更改两行:

删除$response=$next($request)

更改返回$response 返回$next($request)

我认为您想要更改这些行,因为$next($request)是完整的执行。

 类似资料: