我在Entity Framework 6.1中支持WebApi 2.1 OData(v 5.1.1)服务。我试图从安全角度将其锁定,以便用户只能查询属于他们的数据。我有一切正常,直到你进入$ expands选项。
为了便于讨论,请考虑以下简化数据模型:
public class Scenario
{
public Guid Id { get; set; }
public Guid CreatedById { get; set; }
}
public class Property
{
public Guid Id { get; set }
public Guid CreatedById { get; set; }
public IQueryable<Scenario> Scenarios { get; set; }
}
当我调用/Properties(guid'SOMEGUID')?$expand=Scenarios
时,我需要确保只返回CreatedById = CurrentUserId的场景。这需要在服务器端上进行,而不是在客户端查询中进行。
WCF数据服务有QueryInterceptors可以处理这种情况...... WebApi 2.1 OData中的等价物是什么?
谢谢!
答案 0 :(得分:1)
这里有一个关于如何自己实现这个的样本的要点: https://gist.github.com/anonymous/9237151
根据我的git,您可以使用类似的验证器并在CanAcess方法或类似方法上实现验证逻辑。如果这有助于你,请告诉我。
上发布官方样本答案 1 :(得分:-1)
如果我理解你的问题,有两种方法可以解决你的问题。
在IQueryable结果上调用ODataQueryOptions的ApplyTo方法
public IQueryable<Property> Get(ODataQueryOptions queryOptions)
{
....
return queryOptions.ApplyTo(properties);
}
在GetData方法上添加属性Queryable,让WebAPI处理查询选项
[Queryable]
public IQueryable<Property> Get()
{
...
return properties;
}