Как вернуть пользовательское исключение 403 при использовании метода авторизации Laravel 5.1

В laravel 5.1 вы можете вернуть пользовательский ответ при проверке способностей, если вы используете следующий метод:

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

Есть ли способ вернуть аналогичную пользовательскую ошибку при использовании метода авторизации:

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

Вышеприведенное просто генерирует исключение http с кодом состояния 403.


person adam78    schedule 13.12.2015    source источник
comment
Как насчет использования abort('403') внутри метода авторизации   -  person Emeka Mbah    schedule 14.12.2015
comment
Как бы вы это прошли?   -  person adam78    schedule 14.12.2015


Ответы (1)


Я могу сделать это следующим образом:

В 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');
}
person Marcin Nabiałek    schedule 13.12.2015