将 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;
});
}
当普通用户尝试访问管理页面时,我需要 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;
});
}