【发布时间】:2017-03-11 23:58:06
【问题描述】:
我不确定我是否在标题上方创造了这个词,但下面是我的问题摘要。
我使用带有身份验证的 ASP.NET WebAPI 开发了 REST API。
例如假设我有一个公司 API 位于 http://<myurl>/api/Companies 用于 GET 和 POST,http://<myurl>/api/Companies/{id} 用于 GETBYID、PUT 和 DELETE。
在测试 API 时,我发现一旦用户通过 Token 身份验证,他/她就可以编辑任何公司。
我想限制用户编辑/删除她/他所属的公司(以及其他实体)(根据表的逻辑结构)。
我心中的解决方案:
我想到的第一个想法是使用ApplicationUser user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); 找到请求操作的用户,然后通过user.CompanyID 找到他/她所属的公司,如果他/她正在尝试编辑/删除,则匹配有效负载或对他所属的同一实体执行一些其他操作。
是的,对于不同的实体,它将是 user.EntityID。但这是正确的做法吗?
因为这样,我必须在我所有的控制器编辑和删除操作上编写这种代码。
我知道,ASP.NET 不能限制逻辑结构。例如在我的情况下,它无法确定用户是否正在尝试编辑他/她所属的公司,因为这对 DB Relation 来说是合乎逻辑的。但是有没有什么[Authorize] 属性,我可以开发它来包含上述逻辑而不是弄乱控制器?
更新: 不确定是否每个人都了解情况,但这里有更多的故事需要澄清。它是具有多租户数据库的云中的 SaaS 应用程序。因此,每家公司都有自己的一组用户和其他实体,他们不应该能够访问公司以外的实体(根据表关系)
前端 WebApp 正在使用 API,因此我现在正在做的就是通过视图进行限制。但我担心如果有人只是检查 JS 文件并直接调用 API 怎么办?
我需要一些东西来限制用户只在它的实体内。
【问题讨论】:
标签: asp.net-web-api asp.net-identity asp.net-authorization