如何在使用 Laravel 5.1 授权方法时 return 自定义 403 异常

How to return custom 403 exception when using Laravel 5.1 authorize method

在laravel 5.1中,如果您使用以下方法,您可以在检查能力时return自定义响应:

if (Gate::denies('update', $post)) {
        return response()->view('errors.403');
}

有什么方法可以在使用授权方法时return出现类似的自定义错误:

$this->authorize('update', $post);

上面只是抛出了状态码为 403 的 http 异常。

我可以通过以下方式完成:

App\Http\Controllers\Controller中添加如下方法:

protected function createGateUnauthorizedException(
    $ability,
    $arguments,
    $message = 'This action is unauthorized.',
    $previousException = null
) {
    throw $previousException;
}

它将重新抛出 UnauthorizedException

现在 App\Exceptions\Handler.php 您可以在 render 方法的开头添加:

if ($e instanceof \Illuminate\Auth\Access\UnauthorizedException)  {
    return response()->view('errors.403');
}