Clase QueryInterceptorAttribute
QueryInterceptorAttribute en un método lo anota como un interceptor de consulta en el conjunto de entidades especificado.
Jerarquía de herencia
System.Object
System.Attribute
System.Data.Services.QueryInterceptorAttribute
Espacio de nombres: System.Data.Services
Ensamblado: Microsoft.Data.Services (en Microsoft.Data.Services.dll)
Sintaxis
'Declaración
<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple := True, Inherited := True)> _
Public NotInheritable Class QueryInterceptorAttribute _
Inherits Attribute
'Uso
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
El tipo QueryInterceptorAttribute expone los siguientes miembros.
Constructores
Nombre | Descripción | |
---|---|---|
![]() |
QueryInterceptorAttribute | Inicializa una nueva instancia de la clase QueryInterceptorAttribute para el conjunto de entidades especificado por el parámetro entitySetName. |
Arriba
Propiedades
Nombre | Descripción | |
---|---|---|
![]() |
EntitySetName | Obtiene el nombre del conjunto de entidades que contiene la entidad a la que se aplica el interceptor. |
![]() |
TypeId | (Se hereda de Attribute.) |
Arriba
Métodos
Nombre | Descripción | |
---|---|---|
![]() |
Equals | (Se hereda de Attribute.) |
![]() |
Finalize | (Se hereda de Object.) |
![]() |
GetHashCode | (Se hereda de Attribute.) |
![]() |
GetType | (Se hereda de Object.) |
![]() |
IsDefaultAttribute | (Se hereda de Attribute.) |
![]() |
Match | (Se hereda de Attribute.) |
![]() |
MemberwiseClone | (Se hereda de Object.) |
![]() |
ToString | (Se hereda de Object.) |
Arriba
Implementaciones de interfaces explícitas
Nombre | Descripción | |
---|---|---|
![]() ![]() |
_Attribute.GetIDsOfNames | (Se hereda de Attribute.) |
![]() ![]() |
_Attribute.GetTypeInfo | (Se hereda de Attribute.) |
![]() ![]() |
_Attribute.GetTypeInfoCount | (Se hereda de Attribute.) |
![]() ![]() |
_Attribute.Invoke | (Se hereda de Attribute.) |
Arriba
Comentarios
Los métodos anotados con QueryInterceptorAttribute implementan la validación y autorización en el nivel de conjunto de entidades. Servicios de datos de Microsoft WCF no implementa directivas de seguridad pero en su lugar proporciona la infraestructura necesaria para que los desarrolladores de servicios escriban sus propias reglas de seguridad y validación profesional.
El control de acceso del conjunto de entidades y la validación están habilitadas a través de las operaciones de consulta utilizando la composición de consultas. Para controlar el acceso basado en entidades, implemente un método por conjunto de entidades según las siguientes reglas:
El método debe tener ámbito público y estar anotado con QueryInterceptorAttribute, tomando el nombre de un conjunto de entidades como parámetro.
El método no debe aceptar ningún parámetro.
El método debe devolver una expresión de tipo Expression<Func<T, bool>> que es el filtro que se va a crear para el conjunto de entidades.
Ejemplos
En el ejemplo siguiente se controla el acceso al conjunto de entidades Customers. Cada Customer solo puede ver el Orders asociado a ese 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
);
}
Seguridad para subprocesos
Cualquier miembro público static (Shared en Visual Basic) de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.