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

ada*_*m78 2 acl laravel laravel-5 laravel-5.1 laravel-authorization

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

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

有没有什么办法在使用authorize方法时返回类似的自定义错误:

$this->authorize('update', $post);
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*łek 5

我可以通过以下方式做到这一点:

App\Http\Controllers\Controller添加以下方法:

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

它会重新抛出UnauthorizedException.

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

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