次の方法で共有


QueryInterceptorAttribute クラス

QueryInterceptorAttribute は、指定されたエンティティ セットに対するクエリ インターセプターとしてメソッドに注釈を付けます。

継承階層

System.Object
  System.Attribute
    System.Data.Services.QueryInterceptorAttribute

名前空間:  System.Data.Services
アセンブリ:  Microsoft.Data.Services (Microsoft.Data.Services.dll)

構文

'宣言
<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple := True, Inherited := True)> _
Public NotInheritable Class QueryInterceptorAttribute _
    Inherits Attribute
'使用
Dim instance As QueryInterceptorAttribute
[AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public sealed class QueryInterceptorAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method, AllowMultiple = true, Inherited = true)]
public ref class QueryInterceptorAttribute sealed : public Attribute
[<SealedAttribute>]
[<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = true, Inherited = true)>]
type QueryInterceptorAttribute =  
    class
        inherit Attribute
    end
public final class QueryInterceptorAttribute extends Attribute

QueryInterceptorAttribute 型は、以下のメンバーを公開しています。

コンストラクター

  名前 説明
パブリック メソッド QueryInterceptorAttribute entitySetName パラメーターで指定されたエンティティ セットに対する QueryInterceptorAttribute クラスの新しいインスタンスを初期化します。

先頭に戻る

プロパティ

  名前 説明
パブリック プロパティ EntitySetName インターセプターの適用対象となるエンティティを含んだエンティティ セットの名前を取得します。
パブリック プロパティ TypeId (Attribute から継承されています。)

先頭に戻る

メソッド

  名前 説明
パブリック メソッド Equals (Attribute から継承されています。)
プロテクト メソッド Finalize (Object から継承されています。)
パブリック メソッド GetHashCode (Attribute から継承されています。)
パブリック メソッド GetType (Object から継承されています。)
パブリック メソッド IsDefaultAttribute (Attribute から継承されています。)
パブリック メソッド Match (Attribute から継承されています。)
プロテクト メソッド MemberwiseClone (Object から継承されています。)
パブリック メソッド ToString (Object から継承されています。)

先頭に戻る

明示的なインターフェイスの実装

  名前 説明
明示的なインターフェイスの実装プライベート メソッド _Attribute.GetIDsOfNames (Attribute から継承されています。)
明示的なインターフェイスの実装プライベート メソッド _Attribute.GetTypeInfo (Attribute から継承されています。)
明示的なインターフェイスの実装プライベート メソッド _Attribute.GetTypeInfoCount (Attribute から継承されています。)
明示的なインターフェイスの実装プライベート メソッド _Attribute.Invoke (Attribute から継承されています。)

先頭に戻る

説明

エンティティ セット レベルの承認と検証は、QueryInterceptorAttribute で注釈を付けたメソッドによって実装されます。 WCF Data Services にはセキュリティ ポリシーは実装されていませんが、サービス開発者が独自のセキュリティ規則やビジネス検証をプログラミングするために必要なインフラストラクチャが備わっています。

エンティティ セットのアクセス制御と検証は、クエリ コンポジションを使ったクエリ操作を通じて行うことができます。 エンティティ ベースのアクセスを制御するには、エンティティ セットごとのメソッドを次の規則に従って実装します。

対象となるメソッドはパブリック スコープとし、QueryInterceptorAttribute で注釈を付ける必要があります。また、エンティティ セットの名前を受け取るパラメーターが必要です。

対象となるメソッドは、パラメーターの指定を省略できることが必要です。

対象となるメソッドは、Expression<Func<T, bool>> 型の式 (エンティティ セットに対して作成されるフィルター) を返す必要があります。

使用例

次の例では、Customers エンティティ セットへのアクセスを制御します。 それぞれの Customer から見えるのは、その Customer に関連付けられた Orders だけです。

[QueryInterceptor("Orders")]
public Expression<Func<Order, bool>> FilterOrders() 
{
    return o => o.Customer.Name == /* Current principal name. */;
} 
 
// Insures that the user accessing the customer(s) has the appropriate
// rights as defined in the QueryRules object to access the customer
// resource(s).
 
[QueryInterceptor ("Customers")]
public Expression<Func<Customer, bool>> FilterCustomers() 
{
  return c => c.Name == /* Current principal name. */ &&
              this.CurrentDataSource.QueryRules.Contains(
                rule => rule.Name == c.Name &&
                        rule.CustomerAllowedToQuery == true
              );
}

スレッド セーフ

この型の public static (Visual Basic では Shared) のメンバーはすべて、スレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

関連項目

参照

System.Data.Services 名前空間