Freigeben über


QueryInterceptorAttribute-Klasse

Das QueryInterceptorAttribute auf einer Methode kommentiert sie als Abfrageinterceptor auf der angegebenen Entitätenmenge.

Vererbungshierarchie

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

Namespace:  System.Data.Services
Assembly:  Microsoft.Data.Services (in Microsoft.Data.Services.dll)

Syntax

'Declaration
<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple := True, Inherited := True)> _
Public NotInheritable Class QueryInterceptorAttribute _
    Inherits Attribute
'Usage
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

Der QueryInterceptorAttribute-Typ macht folgende Elemente verfügbar.

Konstruktoren

  Name Beschreibung
Öffentliche Methode QueryInterceptorAttribute Initialisiert eine neue Instanz der QueryInterceptorAttribute-Klasse für die vom entitySetName-Parameter angegebene Entitätenmenge.

Zum Anfang

Eigenschaften

  Name Beschreibung
Öffentliche Eigenschaft EntitySetName Ruft den Namen der Entitätenmenge ab, die die Entität enthält, für die der Interceptor gilt.
Öffentliche Eigenschaft TypeId (Geerbt von Attribute.)

Zum Anfang

Methoden

  Name Beschreibung
Öffentliche Methode Equals (Geerbt von Attribute.)
Geschützte Methode Finalize (Geerbt von Object.)
Öffentliche Methode GetHashCode (Geerbt von Attribute.)
Öffentliche Methode GetType (Geerbt von Object.)
Öffentliche Methode IsDefaultAttribute (Geerbt von Attribute.)
Öffentliche Methode Match (Geerbt von Attribute.)
Geschützte Methode MemberwiseClone (Geerbt von Object.)
Öffentliche Methode ToString (Geerbt von Object.)

Zum Anfang

Explizite Schnittstellenimplementierungen

  Name Beschreibung
Explizite SchnittstellenimplementierungPrivate Methode _Attribute.GetIDsOfNames (Geerbt von Attribute.)
Explizite SchnittstellenimplementierungPrivate Methode _Attribute.GetTypeInfo (Geerbt von Attribute.)
Explizite SchnittstellenimplementierungPrivate Methode _Attribute.GetTypeInfoCount (Geerbt von Attribute.)
Explizite SchnittstellenimplementierungPrivate Methode _Attribute.Invoke (Geerbt von Attribute.)

Zum Anfang

Hinweise

Autorisierung und Validierung auf Entitätenmengenebene wird durch mit QueryInterceptorAttribute kommentierten Methoden implementiert. WCF Data Servicess implementieren keine Sicherheitsrichtlinien, aber stellen stattdessen die erforderliche Infrastruktur bereit, damit Dienstentwickler eigene Sicherheitsregeln und Geschäftsvalidierung schreiben können.

Entitätenmengenzugriffssteuerung und Validierung werden durch Abfragevorgänge mit Abfragekomposition aktiviert. Um entitätsbasierten Zugriff zu steuern, implementieren Sie eine Methode pro Entitätenmenge nach den folgenden Regeln:

Die Methode muss über öffentlichen Gültigkeitsbereich verfügen und mit dem QueryInterceptorAttribute annotiert werden und nimmt den Namen einer Entitätenmenge als Parameter.

Die Methode muss keine Parameter akzeptieren.

Die Methode muss einen Ausdruck vom Typ Expression<Func<T, bool>> zurückgeben, der der Filter ist, der für die Entitätenmenge verfasst werden soll.

Beispiele

Das folgende Beispiel steuert den Zugriff auf die Customers-Entitätenmenge. Jeder Customer kann nur Orders sehen, die diesem Customer zugeordnet sind.

[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
              );
}

Threadsicherheit

Alle öffentlichen static (Shared in Visual Basic)-Elemente dieses Typs sind Threadsicher. Für Instanzelemente wird die Threadsicherheit nicht gewährleistet.

Siehe auch

Verweis

System.Data.Services-Namespace