Breezejs限制对实体的访问

时间:2013-03-09 22:54:48

标签: asp.net entity-framework asp.net-web-api odata breeze

我最近开始调查Breezejs。 我正在研究一个供多个客户使用的系统,我不能将一个客户数据暴露给另一个客户。 Breezejs如何确保实现此目标的标准/推荐方式。

说我的实体

拥有房产ID,名称

的客户

已注册的电子邮件,其中包含属性ID,电子邮件,CustomerId

当用户登录时,我将CustomerId保持在会话中,我不允许用户在我的UI中发送客户ID但是如何阻止恶意用户手工制作请求并访问其他客户信息?

2 个答案:

答案 0 :(得分:1)

最简单的方法是在服务器上返回具有客户ID限制的IQueryable。像这样:

[BreezeController]
public class NorthwindIBModelController : ApiController {
    ...
  // initialize this from your session data  
  private var currentCustomerId;

  [HttpGet]
  public IQueryable<Customer> Customers() {
    return ContextProvider.Context.Customers.Where(cust => cust.Id == currentCustomerId);
  }

  [HttpGet]
  public IQueryable<Email> RegisteredEmails() {
    return ContextProvider.Context.Emails.Where(email => email.CustomerId == currentCustomerId);
  }
}

这有意义吗?

答案 1 :(得分:0)

这当然是最简单的,但它没有办法防止有人删除/更新相同的限制条目,因为在保存期间不考虑此查询。只有EntityType被发送到SaveChanges。