【发布时间】:2014-02-25 17:45:18
【问题描述】:
我有一个支持 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 数据服务具有可以处理这种情况的 QueryInterceptor...WebApi 2.1 OData 中的等价物是什么?
谢谢!
【问题讨论】:
-
所有遇到这种情况的人都知道,Javier 提到的模式有效,我们在产品中很好地实现了它。但是,github.com/OData/RESTier 是解决此问题的更全面的解决方案,可以阻止遍历攻击。
标签: asp.net-web-api odata