Невозможно создать исключение из системы безопасности Symfony.

Я использую настраиваемых избирателей Symfony и единодушную стратегию. Диспетчер решений доступа перебирает избирателей, и isGranted возвращает логическое значение.

Мы не можем создать исключение изнутри Voter, чтобы узнать, почему доступ был отклонен. Я хочу знать, какие избиратели отказали в доступе и почему, чтобы я мог показывать пользователю соответствующие сообщения для принятия мер, например. перейти на конкретную подписку. Как лучше всего это сделать?


person vishal    schedule 21.09.2015    source источник
comment
Почему вы не можете бросить исключение от избирателя?   -  person malcolm    schedule 21.09.2015
comment
Из-за того, как работают стратегии управления доступом. если мы бросим исключение, оно не перейдет к следующему избирателю. Менеджер по принятию решений зацикливается на избирателях и принимает решения на основе утверждения, консенсуса и единогласия.   -  person vishal    schedule 21.09.2015
comment
Итак, просто войдите в файл, что вы хотите. (или var_dump, или эхо...)   -  person malcolm    schedule 21.09.2015
comment
я не хочу регистрироваться. Я хочу бросить на самый верхний слой, чтобы я мог отображать сообщение пользователю   -  person vishal    schedule 21.09.2015
comment
Внедрить сеанс и добавить уведомления flashbag.   -  person malcolm    schedule 21.09.2015
comment
у нас нет сеансов, мы используем oauth. В любом случае я переопределяю менеджера решений Access.   -  person vishal    schedule 22.09.2015


Ответы (1)


Хорошим алгоритмом может быть:

  • Бросить исключение внутри избирателя
  • Перехватите его в Менеджере, сохраните в массиве или объекте и продолжите
  • После того, как цепочка (цикл) завершена, проверьте, не «собрал» ли менеджер какое-либо исключение, и ведите себя соответственно.
person DonCallisto    schedule 24.09.2015