Condividi tramite


Classe QueryInterceptorAttribute

La presenza di QueryInterceptorAttribute in un metodo lo identifica come intercettore di query sul set di entità specificato.

Gerarchia di ereditarietà

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

Spazio dei nomi  System.Data.Services
Assembly:  Microsoft.Data.Services (in Microsoft.Data.Services.dll)

Sintassi

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

Nel tipo QueryInterceptorAttribute sono esposti i membri seguenti.

Costruttori

  Nome Descrizione
Metodo pubblico QueryInterceptorAttribute Inizializza una nuova istanza della classe QueryInterceptorAttribute per il set di entità specificato dal parametro entitySetName.

In alto

Proprietà

  Nome Descrizione
Proprietà pubblica EntitySetName Ottiene il nome del set di entità che contiene l'entità a cui viene applicato l'intercettore.
Proprietà pubblica TypeId Ereditato da Attribute.

In alto

Metodi

  Nome Descrizione
Metodo pubblico Equals Ereditato da Attribute.
Metodo protetto Finalize Ereditato da Object.
Metodo pubblico GetHashCode Ereditato da Attribute.
Metodo pubblico GetType Ereditato da Object.
Metodo pubblico IsDefaultAttribute Ereditato da Attribute.
Metodo pubblico Match Ereditato da Attribute.
Metodo protetto MemberwiseClone Ereditato da Object.
Metodo pubblico ToString Ereditato da Object.

In alto

Implementazioni esplicite dell'interfaccia

  Nome Descrizione
Implementazione esplicita dell'interfacciaMetodo privato _Attribute.GetIDsOfNames Ereditato da Attribute.
Implementazione esplicita dell'interfacciaMetodo privato _Attribute.GetTypeInfo Ereditato da Attribute.
Implementazione esplicita dell'interfacciaMetodo privato _Attribute.GetTypeInfoCount Ereditato da Attribute.
Implementazione esplicita dell'interfacciaMetodo privato _Attribute.Invoke Ereditato da Attribute.

In alto

Osservazioni

L'autorizzazione e la convalida a livello di set di entità vengono implementate da metodi annotati con QueryInterceptorAttribute. WCF Data Servicesnon implementano criteri di sicurezza ma invece forniscono l'infrastruttura necessaria agli sviluppatori di servizi per scrivere regole di sicurezza personalizzare nonché la convalida business.

Il controllo e la convalida dell'accesso al set di entità vengono abilitati mediante operazioni di query utilizzando la composizione di query. Per controllare l'accesso basato sulle entità, implementare un metodo per set di entità in base alle seguenti regole:

Il metodo deve avere ambito pubblico e deve essere annotato con QueryInterceptorAttribute, assumendo il nome di un set di entità come parametro.

Il metodo non deve accettare parametri.

Il metodo deve restituire un'espressione di tipo Expression<Func<T, bool>> che rappresenta il filtro da comporre per il set di entità.

Esempi

Nell'esempio seguente viene controllato l'accesso al set di entità Customers. Ogni Customer è in grado di vedere solo gli oggetti Orders associato al Customer in questione.

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

Protezione dei thread

I membri static (Shared in Visual Basic) pubblici di questo tipo sono affidabili. Non è invece garantita la sicurezza dei membri dell'istanza.

Vedere anche

Riferimento

Spazio dei nomi System.Data.Services