Question

est-il possible de faire une personnalisation QueryInterceptor dans une donnée WCFService sur tous les actionnaires au lieu d'un seul?Ceci est un requérant standard:

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

J'aime faire quelque chose comme ceci:

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

Y a-t-il quelque chose ou dois-je intégrer un incepteur pour toutes mes entités?

Était-ce utile?

La solution

Malheureusement, vous ne pouvez pas utiliser une carte wild avec le QueryInterceptor, cependant, vous pouvez obtenir le même résultat que dans votre exemple en remplacement de la méthode de l'ONSTARTProcessingSrequest du DataService et en vérifiant le rôle de l'utilisateur.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top