大きな木が人がいる複雑なシステムがあるとします。単純な考えは従業員/マネージャーの関係であり、多くの従業員が1人のマネージャーに報告します。現在、マネージャーに加えて、マネージャーに代わって行動することができるサポートスタッフがマネージャーの従業員を操作することができます。
CQRSシステムでは、アクションの呼び出し元がサポートスタッフである、「従業員の編集」という架空のアクションのメッセージをどのようにモデル化しますか。このアクションは、マネージャーのセキュリティ関係に従ってスタッフが自分の領域の従業員に作用している場合にのみ成功します。
これのセキュリティを検証するには、データベースにクエリを実行して、変更される人物が実際にそのマネージャーの従業員チェーン内にいることを検証する必要があります。
このクエリはどこで発生しますか?「従業員の編集」メッセージを発信する前に?
メッセージを発信する前にデータが事前に検証されている場合、結果整合性のあるシステムでは、「従業員の編集」メッセージが処理される前に、「従業員の編集」アクションを完了するためのユーザーの権限を削除する別のアクションが発生したと想定します。 。コマンドハンドラーがそのメッセージのセキュリティ上の懸念を検証しない場合、ユーザーがメッセージを実行する権限を失っても、メッセージは引き続き成功します。
これは、UI検証やサーバー側検証と同様に、両面検証が最善の行動であることを意味しているように思われます。ただし、その検証を完了する方法は、CQRSの主要な信条に違反しているように見えます。
CQRSを使用するときに、これらおよび他の同様の横断的関心事に対処する必要がある場合、どのアプローチが最適ですか?