是否可以在WCF数据服务中对所有实体而不是仅一个实体进行自定义QueryInterceptor?这是一个标准的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;
}


我喜欢做这样的事情:

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


有什么方法或者我必须为我的所有实体集成一个接收器吗?

最佳答案

不幸的是,您不能在QueryInterceptor中使用通配符,但是通过覆盖DataService的OnStartProcessingRequest方法并检查那里的用户角色,可以实现与示例中相同的结果。

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

关于c# - 所有实体上的QueryInterceptor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25021967/

10-13 07:39