2010-12-14 7 views
4

MVC 3(RC2)を使用したCMSのようなアプリケーションを開発していますが、私はこの時点で交差点にいます。提案されたアプローチが適切であるかどうかは私自身を説得することができません。私はそれが私がラインの下で大きくひどく犠牲になるいくつかのコーナーをカットしようとしていることを認識しているからです。アプリケーションロジック(認証/認可のための適切な場所)

私は右の私の問題を説明するまで表示されます:

1)私が編集可能にする必要があるリソース(Aそれを呼び出すことができます)を持っています。

2)私は多くの)権限の2を(持っている実装カスタム権限システムを持っている:

  • 独自のリソースを編集することができ、編集その他のリソース

3)資源の創造「自分のリソースを編集できる」権限がある場合、Aは自由に編集できます。

4)別のユーザが唯一の編集A、彼らが権限を持っている場合は、「編集できます他のリソース」

今要件が記述されていることを、私はこれまでのところ、あなたに私のアプローチを教えてみましょう:

1)I [CustomerAuthorize(Perm.CanEditOwnResource、Perm.CanEditOtherResource、真どれ=):アクションはそれの属性を持っている)私は '編集'

3と呼ばれる作用を有する 'ResourceController'

2)と呼ばれるコントローラを持っています]

4)私はドメイン検証を担当するサービスクラスを持っています。

したがって、ユーザーは、[自分のリソースを編集できる]または[他のリソースを編集できる]のいずれかの権限を持っている場合、アクションメソッドを呼び出すことができます。

ユーザーが適切なアクセス許可を持っているかどうか(リソースの所有者によって異なりますか?)リソース・サービス・クラスのコントローラー・アクション内にあるべきかどうか別のサービスクラスでは?異なる意見を聞くために待っている

...それに近づくために

答えて

2

MVCの性質上、さまざまな点で認証チェックが必要になります。

1つ目は、UIに視覚的な手がかりを表示できる(つまり、編集ボタンを表示するかどうかを表示する)ことができるようにする必要があるため、ロジックをビューに表示する必要があります。

もちろん、これはUI用です。誰かがUIにアクセスしてアクセスする場合に備えて、コントローラのアクションに対しても認証/承認が必要です。

最後に、アクションを認証して承認する最も安全な場所は、実行する直前です。たとえば、ハンドラを持っている場合は、そこにいくつかの認証ロジックを配置します。あなたは、他の場所からサービスを呼び出すことによって誰もセキュリティロジックを書くことができないようにし、そのサービスに制限があることを知らないようにしたいとします。これにより、セキュリティオプションの細分化も容易になります。

+0

しかし、論理の重複はありませんか?同じチェックが複数回繰り返されているか?しかし、あなたの懸念を理解しています。パターンを学ぶためのOSSプロジェクトがいくつか見えるのだろうかと思います。 – kidoman

+0

@ KiD0M4N:いくつかのシナリオでは、繰り返しを繰り返さないよりも、いくつかのロジックを繰り返すほうがはるかに簡単です(長期メンテナンスの考慮事項を含む)。つまり、技術的な制約や既存の設計上の決定によって、完全に純粋な「行うことはしません」を追求することが不合理に困難になることがあります。 –

0

一つの方法は、代わりにのみ、「編集」、2つのアクションを持つことです、あなたは「EditOwnResource」と「EditOtherResource」を持っています。次に、それぞれに1つの権限を設定することができます。

MVVMパターンを使用している場合、これらのアクションの可用性をownResourceまたはotherResourceにバインドすることができます。これらの値の設定はビューモデルで行われます。

+0

私はASP.NET MVCを使用しています。したがって、MVVMビットは適用されません。しかし、私は2つの別々のフロントアクションを持つことについて考えます。しかし、おそらく私の特定のケースでは可能ではありません – kidoman

関連する問題