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

#php #laravel #policies

#php #laravel #Политики

Вопрос:

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

Приложение Http Контроллеры 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 сообщением типа «Пользователь не является администратором»

Комментарии:

1. Взгляните на ответы политики .

2. я использую перевод laravel

3. когда я изменяю, чтобы return $user->role === 'admins' ? Response::allow() : Response::deny('User is not administrator'); вернуть страницу 403 с сообщением Пользователь не администратор, но я хочу вернуть, например, false , и на контроллере, если ответ false , я что-нибудь сделаю.

4. вы можете использовать abort_if(!$user-> can(‘viewAny’, Модель::класс), Response::HTTP_FORBIDDEN, ‘ответное сообщение’);

Ответ №1:

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

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

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