SQL ServerでEFコードファーストを使用して、相当に大きく複雑なASP.NET MVC3 Webアプリケーションを継承しました。データベース認証でASP.NETメンバーシップの役割を使用します。コントローラのアクションは、ロールをアクションにマップするAuthorizeAttributeから派生した属性で保護されます。特定のウィジェットを特定のロールに表示するなど、細かい点の拡張メソッドがあります。これは素晴らしい作品です。現在のセキュリティモデルをよく理解しています。既存のアプリケーションにきめ細かなセキュリティを適用する
データレベルでより細かいセキュリティを提供するように求められました。たとえば、「顧客」ユーザーは、自分自身に関連付けられたデータ(データベース全体)を見ることができ、他の顧客は表示できません。問題は、「顧客」が独自の固有の制限を持つ5つの異なるタイプのうちの1つだけであることです(9つのロールのそれぞれが5つのタイプのうちの1つです)。
私が考えることができる最も良いことは、すべてのデータリポジトリを調べ、すべてのLINQステートメント/クエリをすべてのユーザータイプのフィルタで拡張することです。たとえそれに時間があったとしても、それは最もエレガントな方法のようには見えません。
提案がありますか?私は本当にどこから始めるべきかわからないので、何かが役に立つかもしれません。
多くのありがとうございます。
これは良い方法ですが、他のユーザーのデータを見ることができるスーパーユーザーが必要な場合は、さらに複雑になります。うまくいけば、すべてのクエリは何らかのサービス層を介して行われることを願っています。そうすれば、どのレベルの複雑さでもセキュリティを確保することは容易になります。アップデートのセキュリティを忘れないようにしてください。 (ユーザーAはユーザーBのデータを変更できません)。 – Ryan