Classe QueryInterceptorAttribute
QueryInterceptorAttribute sur une méthode l'annote en tant qu'intercepteur de requête sur le jeu d'entités spécifié.
Hiérarchie d'héritage
System.Object
System.Attribute
System.Data.Services.QueryInterceptorAttribute
Espace de noms : System.Data.Services
Assembly : Microsoft.Data.Services (en Microsoft.Data.Services.dll)
Syntaxe
'Déclaration
<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple := True, Inherited := True)> _
Public NotInheritable Class QueryInterceptorAttribute _
Inherits Attribute
'Utilisation
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
Le type QueryInterceptorAttribute expose les membres suivants.
Constructeurs
Nom | Description | |
---|---|---|
QueryInterceptorAttribute | Initialise une nouvelle instance de la classe QueryInterceptorAttribute pour le jeu d'entités spécifié par le paramètre entitySetName. |
Haut de la page
Propriétés
Nom | Description | |
---|---|---|
EntitySetName | Obtient le nom du jeu d'entités qui contient l'entité à laquelle l'intercepteur s'applique. | |
TypeId | (hérité de Attribute.) |
Haut de la page
Méthodes
Nom | Description | |
---|---|---|
Equals | (hérité de Attribute.) | |
Finalize | (hérité de Object.) | |
GetHashCode | (hérité de Attribute.) | |
GetType | (hérité de Object.) | |
IsDefaultAttribute | (hérité de Attribute.) | |
Match | (hérité de Attribute.) | |
MemberwiseClone | (hérité de Object.) | |
ToString | (hérité de Object.) |
Haut de la page
Implémentations d'interfaces explicites
Nom | Description | |
---|---|---|
_Attribute.GetIDsOfNames | (hérité de Attribute.) | |
_Attribute.GetTypeInfo | (hérité de Attribute.) | |
_Attribute.GetTypeInfoCount | (hérité de Attribute.) | |
_Attribute.Invoke | (hérité de Attribute.) |
Haut de la page
Notes
L'autorisation et la validation au niveau du jeu d'entités sont implémentées par les méthodes annotées avec QueryInterceptorAttribute. Services de données WCF n'implémente pas les stratégies de sécurité mais fournit à la place l'infrastructure nécessaire aux développeurs de service pour écrire leurs propres règles de sécurité et les règles de validation métier.
Le contrôle d'accès et la validation de jeu d'entités sont activés par les opérations de requête à l'aide de la composition de requête. Pour contrôler un accès basé sur une entité, implémentez une méthode par entité définie selon les règles suivantes :
La méthode doit avoir une portée publique et être annotée avec le QueryInterceptorAttribute, en prenant le nom d'un jeu d'entités sous forme de paramètre.
La méthode ne doit accepter aucun paramètre.
La méthode doit retourner une expression de type Expression<Func<T, bool>> qui est le filtre à utiliser pour le jeu d'entités.
Exemples
L'exemple suivant contrôle l'accès au jeu d'entités Customers. Chaque Customer ne peut voir que le Orders associé à cet Customer.
[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
);
}
Sécurité des threads
Tous les membres publics static (Shared dans Visual Basic) de ce type sont thread-safe. Tous les membres de l'instance ne sont pas garantis comme étant thread-safe.