Partager via


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
Méthode publique 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
Propriété publique EntitySetName Obtient le nom du jeu d'entités qui contient l'entité à laquelle l'intercepteur s'applique.
Propriété publique TypeId (hérité de Attribute.)

Haut de la page

Méthodes

  Nom Description
Méthode publique Equals (hérité de Attribute.)
Méthode protégée Finalize (hérité de Object.)
Méthode publique GetHashCode (hérité de Attribute.)
Méthode publique GetType (hérité de Object.)
Méthode publique IsDefaultAttribute (hérité de Attribute.)
Méthode publique Match (hérité de Attribute.)
Méthode protégée MemberwiseClone (hérité de Object.)
Méthode publique ToString (hérité de Object.)

Haut de la page

Implémentations d'interfaces explicites

  Nom Description
Implémentation d'interface expliciteMéthode privée _Attribute.GetIDsOfNames (hérité de Attribute.)
Implémentation d'interface expliciteMéthode privée _Attribute.GetTypeInfo (hérité de Attribute.)
Implémentation d'interface expliciteMéthode privée _Attribute.GetTypeInfoCount (hérité de Attribute.)
Implémentation d'interface expliciteMéthode privée _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.

Voir aussi

Référence

Espace de noms System.Data.Services