Compartir a través de


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
Método público 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
Propiedad pública EntitySetName Obtiene el nombre del conjunto de entidades que contiene la entidad a la que se aplica el interceptor.
Propiedad pública TypeId (Se hereda de Attribute.)

Arriba

Métodos

  Nombre Descripción
Método público Equals (Se hereda de Attribute.)
Método protegido Finalize (Se hereda de Object.)
Método público GetHashCode (Se hereda de Attribute.)
Método público GetType (Se hereda de Object.)
Método público IsDefaultAttribute (Se hereda de Attribute.)
Método público Match (Se hereda de Attribute.)
Método protegido MemberwiseClone (Se hereda de Object.)
Método público ToString (Se hereda de Object.)

Arriba

Implementaciones de interfaces explícitas

  Nombre Descripción
Implementación de interfaces explícitasMétodo privado _Attribute.GetIDsOfNames (Se hereda de Attribute.)
Implementación de interfaces explícitasMétodo privado _Attribute.GetTypeInfo (Se hereda de Attribute.)
Implementación de interfaces explícitasMétodo privado _Attribute.GetTypeInfoCount (Se hereda de Attribute.)
Implementación de interfaces explícitasMétodo privado _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.

Vea también

Referencia

Espacio de nombres System.Data.Services