将Laravel Nova中间件重写为响应404

时间:2018-12-06 21:54:25

标签: laravel middleware laravel-nova

当普通用户尝试获取管理页面的访问权限时,我需要返回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

    ];

但没有效果

1 个答案:

答案 0 :(得分:2)

/app/Providers/NovaServiceProvider.php

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