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 | |
---|---|---|
QueryInterceptorAttribute | Inizializza una nuova istanza della classe QueryInterceptorAttribute per il set di entità specificato dal parametro entitySetName. |
In alto
Proprietà
Nome | Descrizione | |
---|---|---|
EntitySetName | Ottiene il nome del set di entità che contiene l'entità a cui viene applicato l'intercettore. | |
TypeId | Ereditato da Attribute. |
In alto
Metodi
Nome | Descrizione | |
---|---|---|
Equals | Ereditato da Attribute. | |
Finalize | Ereditato da Object. | |
GetHashCode | Ereditato da Attribute. | |
GetType | Ereditato da Object. | |
IsDefaultAttribute | Ereditato da Attribute. | |
Match | Ereditato da Attribute. | |
MemberwiseClone | Ereditato da Object. | |
ToString | Ereditato da Object. |
In alto
Implementazioni esplicite dell'interfaccia
Nome | Descrizione | |
---|---|---|
_Attribute.GetIDsOfNames | Ereditato da Attribute. | |
_Attribute.GetTypeInfo | Ereditato da Attribute. | |
_Attribute.GetTypeInfoCount | Ereditato da Attribute. | |
_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.