1

Entity Frameworkデータモデル(.edmx)を公開するADO.NETデータサービスがあります。

特定のユーザーの特定のエンティティへの読み取り/書き込みを許可/拒否する必要があります。Windows認証を使用しています。私が見つけたのは、OnStartProcessingRequestをオーバーライドすることだけです。

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
}

しかし、これはひどいことだと思います。より良い解決策を望んでいます...何かアイデアはありますか?:(

4

1 に答える 1

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!");
      }
}
于 2009-09-22T15:42:55.127 に答える