Пользовательское сообщение - Laravel 7 - Отказано в авторизации

У меня есть контроллер, в котором в своей функции он проверяет политику, назначенную модели Post:

Приложение\Http\Controllers\PostController

class PostController extends Controller
{
    public function index(Request $request, Post $post) {
        
 $response = Gate::inspect('viewAny', $post);

    if ($response->allowed()) {
        echo 'valid';
    } else {
        echo 'invalid';
    }
    }
}

Файл: PostPolicy

 public function viewAny(User $user)
 {
    return $user->role === 'admin' ? Response::allow() : Response::deny();
 }

когда пользователь вошел в систему как администратор, он возвращает сообщение о входе в систему с правами администратора, когда он не является администратором, он возвращает ответ 403, я хотел бы заменить этот ответ 403 сообщением типа «Пользователь не является администратором».


person SaroBeatbox    schedule 01.09.2020    source источник
comment
Ознакомьтесь с ответами на политику.   -  person Remul    schedule 01.09.2020
comment
я использую перевод laravel   -  person Alzafan Christian    schedule 01.09.2020
comment
когда я перехожу на return $user->role === 'admins' ? Response::allow() : Response::deny('User is not administrator');, возвращаю страницу 403 с сообщением, что пользователь не является администратором, но я хочу вернуть, например, false, и на контроллере, если ответ будет false, поэтому я что-нибудь сделаю.   -  person SaroBeatbox    schedule 01.09.2020
comment
вы можете использовать abort_if(!$user-›can('viewAny', Model::class), Response::HTTP_FORBIDDEN, 'ответное сообщение');   -  person Alzafan Christian    schedule 01.09.2020


Ответы (1)


Вы можете использовать методы can() и cant() для модели пользователя в вашем контроллере:

if ($user->cant('view-any', $post)) {
    return 'User is not administrator';
}

Источник: Документация Laravel — Авторизация

person Ma Kobi    schedule 01.09.2020