2011-04-01 8 views
2

最初に、私はEF 4.1を使用し、リポジトリと作業単位のパターンを利用しています。私たちはWebアプリケーションを構築しています。Entity Framework 4.1を使用してアプリケーションのアクセス権を処理するための戦略

私はEF 4のコードファーストアプローチを使用してプロジェクトを開始しています。現在、データベースは存在しません。だから、私は、ユーザーがアクセスできるデータとそのロジックがどこのフレームワークにあるのかを処理する戦略を考え出しています。

ユーザーがシステムにログインし、システムのユーザーを作成したいとします。そのフォームには、その新しいユーザーを何らかの役割を果たすためのフィールドがあります。この「新規ユーザー」の作成を担当するユーザーは、特定のタイプのロール(ユーザー、作成者、ビューアー)のみを表示できますが、管理者ロールは存在しますが、このユーザーにはアクセスできません。そのロールリストを私に提供するサービスを呼び出すと、すべてのロールを元に戻してから、何らかの権限セットに基づいて新しいリストを作成したいのですか?

私は自分のリポジトリにこのロジックのいくつかを持っているという考えに苦労していますが、本当にそこには当てはまらないと思います。

答えて

2

セキュリティは複数のレベルにする必要がありますが、私はすべてがリポジトリよりも高くなると思います。あなたのUI /メニューは、ユーザーがアクセス権を持たない機能を公開すべきではありませんが、おそらくアプリケーションサービス層で、ユーザーが試みている操作を実行するアクセス権を持っていることも確認してください。

ユーザーロールの場合、ロールモデルをデータモデルに組み込むことができますが、それらをデータベースからすべて取り出してキャッシュし、コードロジックでリストをフィルタリングします。しかし、問題はユーザーがどのような役割を追加できるのか、追加しないのかをどのように知っていますか?ギャップを残して特定の番号を使用して、特定の役割のユーザーに、自分の役割と同等以下のユーザーを作成させることができます。例えば

RoleID Role 
    1 Peon 
    5 Common Folk 
    10 King 
    15 Supreme Master of the Universe 

だから多分のみキングスとSMUのは、新しいユーザーを追加する機能を持っています。 SMUは他のSMU、Kings、Common Folk、およびPeonsを作成することができます。キングズはSMUを除いて同じことをすることができます。 IDの隙間は、後に番号を付け直さずに後で役割を追加することができます。

2

コントローラは、メソッドに対して異なるAuthorize属性宣言を持つことができ、ユーザがmvcフレームワークによってスローされた例外なしで呼び出すことができるロールを登録します。

http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx

+0

これは細かいデータフィルタリングにも使用できますか?私は属性がプロパティ全体に影響を与えると思いましたか?私は彼らにロールコレクションを見せたいかもしれませんが、ロールコレクションは限られています。 – DDiVita

+0

@DDiVita、私はあなたの質問を理解している - 答えはいいえ、あなたはできません。これは、まったく、まったくのアプローチではありません。しかし、データの検索はいくつかのコントローラメソッドに分割することができます。それぞれのコントローラメソッドは、より細かいアプローチのために異なるアクセス許可のセットを持っています。 – dexter

関連する問題