MVC 3(RC2)を使用したCMSのようなアプリケーションを開発していますが、私はこの時点で交差点にいます。提案されたアプローチが適切であるかどうかは私自身を説得することができません。私はそれが私がラインの下で大きくひどく犠牲になるいくつかのコーナーをカットしようとしていることを認識しているからです。アプリケーションロジック(認証/認可のための適切な場所)
私は右の私の問題を説明するまで表示されます:
1)私が編集可能にする必要があるリソース(Aそれを呼び出すことができます)を持っています。
2)私は多くの)権限の2を(持っている実装カスタム権限システムを持っている:
- は
- 独自のリソースを編集することができ、編集その他のリソース
3)資源の創造「自分のリソースを編集できる」権限がある場合、Aは自由に編集できます。
4)別のユーザが唯一の編集A、彼らが権限を持っている場合は、「編集できます他のリソース」
今要件が記述されていることを、私はこれまでのところ、あなたに私のアプローチを教えてみましょう:
1)I [CustomerAuthorize(Perm.CanEditOwnResource、Perm.CanEditOtherResource、真どれ=):アクションはそれの属性を持っている)私は '編集'
3と呼ばれる作用を有する 'ResourceController'
2)と呼ばれるコントローラを持っています]
4)私はドメイン検証を担当するサービスクラスを持っています。
したがって、ユーザーは、[自分のリソースを編集できる]または[他のリソースを編集できる]のいずれかの権限を持っている場合、アクションメソッドを呼び出すことができます。
ユーザーが適切なアクセス許可を持っているかどうか(リソースの所有者によって異なりますか?)リソース・サービス・クラスのコントローラー・アクション内にあるべきかどうか別のサービスクラスでは?異なる意見を聞くために待っている
...それに近づくために
しかし、論理の重複はありませんか?同じチェックが複数回繰り返されているか?しかし、あなたの懸念を理解しています。パターンを学ぶためのOSSプロジェクトがいくつか見えるのだろうかと思います。 – kidoman
@ KiD0M4N:いくつかのシナリオでは、繰り返しを繰り返さないよりも、いくつかのロジックを繰り返すほうがはるかに簡単です(長期メンテナンスの考慮事項を含む)。つまり、技術的な制約や既存の設計上の決定によって、完全に純粋な「行うことはしません」を追求することが不合理に困難になることがあります。 –