Предположим, у меня сложная система, где есть большие деревья людей. Простые мысли - отношения между сотрудниками и менеджерами, многие сотрудники сообщают одному менеджеру. Теперь помимо менеджера есть сотрудники службы поддержки, которые способны действовать от имени менеджера, могут манипулировать сотрудниками менеджеров.CQRS, применяющие сквозные проблемы, такие как безопасность
В системе CQRS, как бы вы моделировали сообщение для гипотетического действия «edit employee», где invoker of the action является персоналом службы поддержки. Действие может быть выполнено только в том случае, если сотрудник в соответствии с отношениями безопасности менеджера действует на сотрудника в своей сфере.
Проверка безопасности этого требует запроса базы данных для проверки того, что измененное лицо действительно находится внутри цепочки сотрудников этого менеджера.
Где этот запрос возникнет? Перед отправкой сообщения «Редактировать сотрудника»?
Если данные предварительно подтверждены перед отправкой сообщения, в согласованной системе предположим, что перед обработкой сообщения «Редактировать сотрудник» произошло отдельное действие, которое удалило бы полномочия пользователя на завершение " редактировать сотрудника ". Если обработчик команд не проверяет проблемы безопасности этого сообщения, сообщение все равно будет успешным, даже если пользователь больше не имеет права его выполнять.
Это, по-видимому, подразумевает, что проверка двусторонней валидации, аналогичная проверке UI &, будет лучшей практикой. Однако метод завершения этой проверки кажется, что он нарушит ключевые принципы для CQRS.
Какими подходами лучше всего справляться с этими и другими подобными проблемами поперечной резки при использовании CQRS?
IMO нет общего ответа ... Я бы всегда проверял на стороне обработчика * как минимум * и ** опционально ** «вверх» (который может быть в той части, которая принимает сообщение в очередь) – Yahia
Я также думаю, что важно различать истинные сквозные проблемы, такие как аутентификация, простая авторизация (разрешено ли этому пользователю выполнять такое действие), из бизнес-правил, которые определяют, разрешено ли что-либо для определенного объекта. –