Выводим работу с политиками в Laravel на новый уровень

Pavel Buchnev
2 min readJul 5, 2020

--

Недавно прочитал статью про политики в Laravel и захотелось немного добавить от себя.

Само по себе использование политик не такая уж сложная задача, простые сценарии рассматривать не интересно. Давайте представим следующую ситуацию:

Вы заказчик и вы решили найти исполнителя на уборку офиса. Вы создаете некоторое задание, где описываете детали и публикуете. Исполнители видят ваше задание и хотят откликнуться на него.

Вот список требований для отклика исполнителем

  1. Задание должно быть опубликовано (Не черновик)
  2. Автор не может откликнуться на своё задание
  3. Исполнитель должен пройти проверку
  4. Исполнитель ещё не оставлял отклик к этому заданию
  5. У исполнителя достаточно средств на счете для оплаты отлкика

Напишем политику согласно нашим требованиям

Все выглядит логично и вроде бы проблем нет. Напишем теперь контроллер

Ну а теперь вопрос, как понять по какой причине пользователь не смог оставить свой отклик и что мы ему должны показать?

На этот случай разработчики Laravel позаботились о нас и добавили возможность возвращать причину из-за которой произошел отказ в доступе. Согласно документации вы можете использовать вспомогательный класс для явного указания причин того или иного запрета.

Давайте теперь доработаем политики и укажем конкретные причины, почему пользователь не может оставить отклик.

Теперь, когда Gate будет выбрасывать исключение \Illuminate\Auth\Access\AuthorizationException в него будет передаваться код ошибки, а также текст сообщения, и пользователь в ответе от сервера увидит конкретную причину.

Вроде не так сложно, но этой возможностью почему-то редко кто пользуется. На этом все. Буду рад, если заметка окажется полезной!

P.S. Как говорится, не забывайте подписываться, ставить лайки и оставлять комментарии под видео.

Мои статьи по Laravel

--

--

Pavel Buchnev
Pavel Buchnev

Written by Pavel Buchnev

Senior PHP Developer | Contributor to Spiral Framework 🚀 | Enthusiast of RoadRunner & long-running applications | Creator of Buggregator

Responses (1)