如何确保所有WebAPI / OData请求都与特定用户相关?

时间:2013-11-29 18:00:10

标签: rest asp.net-mvc-4 odata asp.net-web-api

我在使用WCF服务(SOAP)时发现这个过程更简单,但是这里......

用户1 .. *类别:

在公开OData RESTful服务(MVC4,WebAPI,OData)时,可以发布客户端代码,如:

/odata/Categories?$filter=startswith(CategoryName,'paid')

甚至

/odata/Categories

将返回所有用户的所有类别。不太安全。

我想确保用户登录时发出的所有请求(我使用自己的自定义角色提供程序进行表单身份验证)只返回与该用户相关的数据(其中userID = x)。是否需要创建自定义过滤器,即使登录用户看到传出的WebAPI / OData请求路径(通常在JavaScript中定义),他们也无法尝试获取其他用户的信息?

db中的每个导航属性或相关表都有一个UserID字段,其中可以使用“AND UserID = x”。

这会涉及创建某种FilterQueryValidator(实际上是查询添加)类似于this页面底部的内容吗?

我只是不确定它是如何工作的,并且想要一些指示。

仅供参考:这可能与this其他问题有关,但更具体地涉及基于用户的请求。

1 个答案:

答案 0 :(得分:1)

您可以使用过滤器属性,也可以在ODataContoller中覆盖GET / POST等,以将UserID == X添加到Linq表达式。

e.g。

public override IQueryable<Product> Get()
{
   return _context.Products.Where(x => x.UserID == user_id);
}