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の組み込み機能を使用して)従うことができるパターンまたはベストプラクティスはありますか?