banderos120
@banderos120
Играю на балалайке

Как решить вопрос с получением текста причины отказа в доступе при использовании CustomVoter и IsGranted()?

Здравствуйте.
Voter возвращает ACCESS_GRANTED или ACCESS_DENIED в случаях если доступ разрешен или запрещен соответственно, но проверка на право доступа является комплексной ,т.е. факторы которые влияют на принятие решения не всегда являются одиночными, например: вы хотите оплатить товар, но вам отказывают в доступе, а ведь, причин отказа могут быть разные, либо "Счет заблокирован", либо счет не заблокирован, но "Не хватает средств на счете". И хотелось бы получать сообщения конкретной ошибки ,из-за которой было отказано в доступе, чтобы отобразить пользователю в контроллере.
Подойдет ли вариант записывания ошибок в специальный сервис, который будет вызываться в Voter-е при отказе в доступе, либо использовать статический класс ?
Или может использовать трейт который будет работать со статическим классом , и реализовывать этот трейт в Voter-ах ?
  • Вопрос задан
  • 274 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Счет заблокирован

это бизнес правило, его не надо в секьюрити воутер пихать.

Не хватает средств на счете

Опять же это правило не в секьюрити воуетере должно быть. Тут вы можете просто бросить исключение или еще чего в соответствующем сервисе.

Секьрити воутеры нужны только для определения может ли пользователь выполнять какое либо действие или нет. И причина тут только одна может быть - нет прав.

Другие бизнес правила и ограничения будьте добры реализовать в сервисах своих. Можете тот же chain-of-responsibilitites шаблон использовать если вам так угодно, но...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы