如果不允许路由,则返回403

时间:2018-01-25 08:56:31

标签: php laravel-5.5

我有中间件的路由组(我使用Zizaco/entrust包):

Route::group(['as' => 'admin.', 'prefix' => 'admin', 'middleware' => ['role:admin']], function (){
    ...
});

当我尝试在未经过身份验证的情况下输入http://mysite/admin时,我会遇到异常

  

Symfony \ Component \ HttpKernel \ Exception \ HttpException
  没有消息

但我想返回403 我试着这样做:

Route::fallback(function(){
    abort(403);
});

但它没有帮助。

编辑1:这里我们在Laravel 5.5.28中有exception handle

public function abort($code, $message = '', array $headers = [])
    {
        if ($code == 404) {
            throw new NotFoundHttpException($message);
        }

        throw new HttpException($code, $message, null, $headers);
    }

如您所见,没有403句柄。

1 个答案:

答案 0 :(得分:0)

您必须修改handle 角色中间件方法

public function handle($request, Closure $next, $roles)
{
    if (!is_array($roles)) {
        $roles = explode(self::DELIMITER, $roles);
    }
    if ($this->auth->guest() || !$request->user()->hasRole($roles)) {
        abort(403); // notice here it returns 403
    }
    return $next($request);
}