将 laravel nova 中间件重写为响应 404

Rewrite laravel nova middleware to response 404

当普通用户尝试访问管理页面时,我需要 return 404 而不是 403 错误页面。 负责此操作的 Nova 中间件位于此处 /nova/src/Http/Middleware。 看起来像这样:

<?php

namespace Laravel\Nova\Http\Middleware;

use Laravel\Nova\Nova;

class Authorize
{
    /**
     * Handle the incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return \Illuminate\Http\Response
     */
    public function handle($request, $next)
    {
        return Nova::check($request) ? $next($request) : abort(403);
    }
}

如果我把这里的abort(403)改成abort(404)—— 它运行良好,完全符合我的需要。

如何扩展此中间件以在我的应用程序中使用它。我应该怎么做才能在我的应用程序中正确地重写中间件,以便我将来可以更新 Nova 而不会重写这些更改

我试过的:

中扩展此中间件
<?php

namespace App\Http\Middleware;

use Laravel\Nova\Nova;

class NovaAuthorize extends \Laravel\Nova\Http\Middleware\Authorize
{
    /**
     * Handle the incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return \Illuminate\Http\Response
     */
    public function handle($request, $next)
    {
        return Nova::check($request) ? $next($request) : abort(404);
    }
}

并将其添加到我的中间件

protected $middleware = [
        ...
        \App\Http\Middleware\NovaAuthorize::class, // nova access

    ];

但是没有效果

/app/Providers/NovaServiceProvider.php

protected function gate()
    {
        Gate::define('viewNova', function ($user) {
            if( !$user->isAdmin() ){ 
                abort(404);
            }
            return true;
        });
    }