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 | |
---|---|---|
QueryInterceptorAttribute | Initialisiert eine neue Instanz der QueryInterceptorAttribute-Klasse für die vom entitySetName-Parameter angegebene Entitätenmenge. |
Zum Anfang
Eigenschaften
Name | Beschreibung | |
---|---|---|
EntitySetName | Ruft den Namen der Entitätenmenge ab, die die Entität enthält, für die der Interceptor gilt. | |
TypeId | (Geerbt von Attribute.) |
Zum Anfang
Methoden
Name | Beschreibung | |
---|---|---|
Equals | (Geerbt von Attribute.) | |
Finalize | (Geerbt von Object.) | |
GetHashCode | (Geerbt von Attribute.) | |
GetType | (Geerbt von Object.) | |
IsDefaultAttribute | (Geerbt von Attribute.) | |
Match | (Geerbt von Attribute.) | |
MemberwiseClone | (Geerbt von Object.) | |
ToString | (Geerbt von Object.) |
Zum Anfang
Explizite Schnittstellenimplementierungen
Name | Beschreibung | |
---|---|---|
_Attribute.GetIDsOfNames | (Geerbt von Attribute.) | |
_Attribute.GetTypeInfo | (Geerbt von Attribute.) | |
_Attribute.GetTypeInfoCount | (Geerbt von Attribute.) | |
_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.