2

Entity Framework 4.1を使用するWebアプリケーションでは、SQLServerメンバーシップを使用してユーザーアクセスを管理します。ただし、権限管理のより詳細な役割のセットを実装する必要があります。

データベースには、相対テーブルがすでに作成されています。

- Roles 
- Permissions 
- UserInRole (roles per user)
- RolesPermissions (permissions associated to a role) 

一部のコアエンティティの属性を使用して、EFでセマンティックにアクセスを制限します。たとえば、特定のユーザーを指定すると、相対的な出荷済み注文または固有のデータのみを表示できます。

ここで、パーミッションを挿入します。これは、例として、顧客が注文を表示および作成できるのに対し、会社(これらは2つの異なる役割)は製品の注文のみを表示し、レポートを印刷できることを意味します。

エンティティレベルでのアクセス許可にも属性を使用し、メソッドが呼び出されたときに現在のユーザーが適切な権限を所有しているかどうかを確認するという考え方です。例えば:

public void BeforeAdd()
{
   // Get required permissions for the specific entity (Order as example)

   //Check that current user has permission of creating a new Order 
}

このようなメソッドは各エンティティによって呼び出され、エンティティレベルで権限の制御を一元化できます。

フロントエンドとしてMVCを使用しており、そこではすでに役割とアクセス許可へのアクセスを実装しています。バックエンド部分(データレイヤーを含む)でも同じようにする必要があります。これらは、Webサービスを介して通信する2つの別個のサーバーです。バックエンド部分に権限管理を実装することにより、データアクセスの制御が強化されます。

アクセス許可の管理を実現するために(最終的にはEFの組み込み機能を使用して)従うことができるパターンまたはベストプラクティスはありますか?

4

2 に答える 2

3

従うことができるパターンやベストプラクティスはありますか

はい、それはアスペクト指向プログラミングと呼ばれ、 PostSharpはおそらくこの仕事に最適なツールです(残念ながら無料ではありません)。

ただし、MVCを使用している場合(まだ何も言及していません)、独自のバージョンのAuthorizeAttributeを派生させて独自のアクセス許可テーブルをクエリし、許可する役割でアクションを簡単に装飾できます。

[Authorize(Roles="Customer, Company")]
public ActionResult ViewOrders(...)
{
    ...
}

[Authorize(Roles="Customer")]
public ActionResult CreateOrder(...)
{
    ...
}
于 2012-10-23T15:05:50.860 に答える
0

ASP.NET の既定のメンバーシップ プロバイダーに精通していますか?

会員制の仕組みの典型的な例です。慣れていない場合は、勉強する良い例かもしれません。

この SO の質問も役立つ場合があります。

于 2012-10-23T15:07:51.437 に答える