CQRS применяет сквозные проблемы, такие как безопасность

Предположим, у меня есть сложная система, в которой есть большие деревья людей. Простые мысли - это отношения сотрудников и менеджеров, многие сотрудники подчиняются одному менеджеру. Теперь, помимо менеджера, есть вспомогательный персонал, который может действовать от имени менеджера и манипулировать его сотрудниками.

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

Проверка безопасности будет включать запрос к базе данных, чтобы убедиться, что изменяемый человек действительно находится внутри цепочки сотрудников этого менеджера.

Где бы возник этот вопрос? Перед отправкой сообщения «изменить сотрудника»?

Если данные предварительно проверяются перед отправкой сообщения, в окончательно согласованной системе предположим, что до обработки сообщения «изменить сотрудника» произошло отдельное действие, которое должно было удалить полномочия пользователя на выполнение действия «редактировать сотрудника». Если обработчик команд не проверяет проблемы безопасности этого сообщения, сообщение все равно будет успешным, даже если у пользователя больше нет полномочий на его выполнение.

Это может означать, что двусторонняя проверка, аналогичная проверке пользовательского интерфейса и проверке на стороне сервера, будет лучшим способом действий. Однако метод завершения этой проверки кажется нарушением ключевых принципов CQRS.

Какой подход (и) лучше всего подходит для решения этих и других аналогичных сквозных проблем при использовании CQRS?

5
задан Chris Marisic 25 January 2012 в 21:30
поделиться