Предположим, у меня есть сложная система, где есть большие деревья людей. Простые мысли - это отношения сотрудников и менеджеров, многие сотрудники подчиняются одному менеджеру. Теперь помимо менеджера есть вспомогательный персонал, который способен действовать от имени менеджера и может манипулировать сотрудниками менеджера.
В системе CQRS, как бы вы смоделировали сообщение для гипотетического действия «редактировать сотрудника», где инициатором действия является персонал службы поддержки. Действие может быть успешным только в том случае, если сотрудник в соответствии с отношениями безопасности менеджера действует на сотрудника в своей сфере.
Проверка безопасности этого потребует запроса к базе данных, чтобы убедиться, что изменяемый человек действительно находится в цепочке сотрудников этого менеджера.
Где может возникнуть этот запрос? До создания сообщения «изменить сотрудника»?
Если данные предварительно проверяются перед отправкой сообщения, в конечном итоге согласованной системе предположим, что до того, как сообщение «изменить сотрудника» было обработано, произошло отдельное действие, которое лишило бы пользователя права выполнять действие «изменить сотрудника». . Если обработчик команды не подтверждает проблемы безопасности этого сообщения, сообщение все равно будет успешным, даже если пользователь больше не имеет полномочий для его выполнения.
Казалось бы, это означает, что двусторонняя проверка, аналогичная проверке пользовательского интерфейса и проверке на стороне сервера, будет лучшим способом действий. Однако метод завершения этой проверки, похоже, нарушает ключевые принципы CQRS.
Какие подходы лучше всего подходят для решения этих и других подобных комплексных проблем при использовании CQRS?