我在使用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其他问题有关,但更具体地涉及基于用户的请求。
答案 0 :(得分:1)
您可以使用过滤器属性,也可以在ODataContoller中覆盖GET / POST等,以将UserID == X添加到Linq表达式。
e.g。
public override IQueryable<Product> Get()
{
return _context.Products.Where(x => x.UserID == user_id);
}