【问题标题】:How to ensure that all WebAPI/OData requests pertain to a specific user?如何确保所有 WebAPI/OData 请求都与特定用户相关?
【发布时间】:2013-12-15 23:23:08
【问题描述】:

在使用 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 其他问题有关,但更具体的是基于用户的请求。

【问题讨论】:

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


    【解决方案1】:

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

    例如

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

    【讨论】:

    • 您能否提供每个建议答案的样本?
    猜你喜欢
    • 2014-03-31
    • 1970-01-01
    • 2017-04-25
    • 2020-09-20
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2013-05-23
    相关资源
    最近更新 更多