Pergunta

É possível fazer uma personalizada QueryInterceptor em um Serviço de Dados do WCF em todos os entites em vez de apenas um?Este é um padrão QueryInterceptor:

[QueryInterceptor("Products")]
public Expression<Func<Product, bool>> OnQueryProducts()
{
    var user = HttpContext.Current.User;
    if (user.IsInRole("Administrator"))
        return (Product p) => true;
    else
        return (Product p) => false;
}

Eu gostaria de fazer algo como isto:

[QueryInterceptor("*")]
public Expression<Func<Object, bool>> OnQueryProducts()
{
    var user = HttpContext.Current.User;
    if (user.IsInRole("Administrator"))
        return (Object p) => true;
    else
        return (Object p) => false;
}

Existe alguma maneira ou tenho que fazer para integrar um inceptor para todas as minhas entidades?

Foi útil?

Solução

Infelizmente, você não pode usar um cartão selvagem com o QueryInterceptor no entanto, você pode obter o mesmo resultado como no seu exemplo, substituindo-se a OnStartProcessingRequest método de DataService e verificar o papel do usuário não existe.

protected override void OnStartProcessingRequest(ProcessRequestArgs args)
{
    var user = HttpContext.Current.User;

    // Only Administrator users are allowed access
    if (!user.IsInRole("Administrator"))
    {
        // Any other role throws a security exception
        throw new SecurityException("You do not have permission to access this Service");
    }

    base.OnStartProcessingRequest(args);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top