2009-08-28 16 views
1

私はEntity Frameworkデータモデル(.edmx)を公開するADO.NETデータサービスを持っています。ADO.NETデータサービスのカスタム承認

特定のユーザーに対して特定のエンティティに対する読み取り/書き込みを許可/拒否する必要があります。私はWindows認証を使用します。 ...任意のアイデアを

protected override void OnStartProcessingRequest(ProcessRequestArgs args) 
{ 
    base.OnStartProcessingRequest(args); 

    bool isBatch = args.IsBatchOperation; 
    System.Uri requestUri = args.RequestUri; 

    // parse uri and determine the entity and the operation 
    // (i.e.: select/update/delete/insert) will be determined by the HTTP verb 
} 

は、しかし、私は、これは吸うと思うと、私はよりよい解決策を期待しています:私は見つけることができるすべてはOnStartProcessingRequestをオーバーライドしていますか? :(

答えて

4

あなたは

config.SetEntitySetAccessRule("Orders", UserRights.GetRights(identity, "Orders")); 

config.SetEntitySetAccessRule("Products", UserRights.GetRights(identity, "Products")); 
のように、ユーザごとにサービスの初期化にエンティティ権を設定することができ、このようにリソースの可視性を適用する主な欠点は、視認性がエンティティレベルではなく行レベルであるということです。

あなたは、サービス操作の組み合わせでそれを克服し、インターセプタを変更することができます。

[ChangeInterceptor("Products")] 
public void OnProductsChange(Products product, UpdateOperations operations) 
{ 
     if(!UserRights.HasAccessRights(identity, "Products", operations)) 
     { 
      throw new DateServicesException(404, "Access denied!"); 
     } 
} 
+1

最初の例を使用する必要がありますあなたが望むいけない場合pplがテーブル/リソース全体に特定のアクセス権を持つようにする 2番目の例は、サーバーサイドの計算に依存する特定の価格差を超える製品をユーザーが作成できないようなシナリオで使用できます。 – dmportella

+0

すばらしい答え! +1 –

関連する問題