コントローラーとアクションで承認属性を使用する ASP.NET MVC アプリケーションがあります。これはうまく機能していますが、新しいしわが現れました.
オブジェクト: 出荷
役割:出荷、経理、一般ユーザー
出荷はワークフローを移動します。状態Aでは配送のみ編集可能です。状態 B では、経理のみが編集できます。
ShipmentController と Edit Action があります。編集アクションをこれら 2 つのロールのみに制限するために Authorization 属性を設定できますが、これでは、Shipment がどちらの状態にあるかが区別されません。サービス呼び出しの前に、アクション内でいくつかの Authorization を実行して、ユーザーが編集アクションの実行を実際に許可されています。
だから私は2つの質問が残っています:
1)アクション内で承認を得る良い方法は何ですか。コントローラ アクションがサービスを呼び出すと、サービスが適切な呼び出しを Shipment オブジェクト (更新数量、更新日など) に行います。Shipment オブジェクトが承認要件にとらわれないようにしたいことは確かです。一方で、サービス オブジェクトに承認について知らせたいかどうかはよくわかりません。これに適したパターンはありますか?
2) 私の問題は実際には悪い設計の兆候ですか? ShipmentController の代わりに、StateAShipmentController と StateBShipmentController を使用する必要がありますか? Shipment オブジェクトに組み込まれたポリモーフィズムはありません (状態は単なる列挙型です)。
私の場合の特定の解決策ではなく、より一般的な解決策を求めていると思います。質問を説明するための例を提供したかっただけです。
ありがとう!