当普通用户尝试获取管理页面的访问权限时,我需要返回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
];
但没有效果
答案 0 :(得分:2)
在/app/Providers/NovaServiceProvider.php
protected function gate()
{
Gate::define('viewNova', function ($user) {
if( !$user->isAdmin() ){
abort(404);
}
return true;
});
}