我们正在考虑将 ASP.NET MVC 的 Hot Towel SPA 模板作为一个新项目,但不确定如何过滤和保护用户特定数据。我们的项目将是基于 EntityFramework 的 ASP.NET MVC。
考虑一种允许人们存储不同公司的销售信息的服务,每个公司都有一个或多个位置。
- 当商店经理登录时,他应该只看到他商店的销售额。
- 当区域经理登录时,他应该只能看到他所在区域的商店。
- 当 CEO 登录时,他应该可以看到所有的商店。
这个业务逻辑可以在客户端的 Javascript 中处理,但似乎很容易用浏览器开发工具、Fiddler 等绕过。通过操作 HTTP 请求字符串(因为它是基于 OData 的),他们可以看到公司中其他商店的数据,并可能看到其他公司的商店。
最好在客户端说:
var query1a = EntityQuery.from("Customers")
.where("CompanyName", "startsWith", "A");
它只为当前用户返回结果,而不是为整个数据库返回结果。
有关如何在服务器上完成此操作的任何建议/示例/教程?
将此“过滤器”逻辑存储在会话变量中是否有意义?所以对于上面的查询:
(大意的东西)
[HttpGet]
public IQueryable<Customer> Customers() {
return _contextProvider.Context.Customers.Where(x=> x.CompanyID == Session['CompanyID'];
}