我最近开始研究 Breezejs。我正在开发一个将被多个客户使用的系统,我不能将一个客户的数据暴露给另一个客户。Breezejs 如何确保实现这一点的标准/推荐方式是什么?
说我的实体是
具有属性 ID、名称的客户
具有属性 Id、Email、CustomerId 的已注册电子邮件
当用户登录时,我将 CustomerId 保持在会话中,我不允许我的 UI 中的用户发送客户 ID,但是如何阻止恶意用户手工制作请求并访问其他客户信息?
我最近开始研究 Breezejs。我正在开发一个将被多个客户使用的系统,我不能将一个客户的数据暴露给另一个客户。Breezejs 如何确保实现这一点的标准/推荐方式是什么?
说我的实体是
具有属性 ID、名称的客户
具有属性 Id、Email、CustomerId 的已注册电子邮件
当用户登录时,我将 CustomerId 保持在会话中,我不允许我的 UI 中的用户发送客户 ID,但是如何阻止恶意用户手工制作请求并访问其他客户信息?
最简单的方法是在具有客户 ID 限制的服务器上返回您的 IQueryables。像这样的东西:
[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);
}
}
这有意义吗?
这当然是最简单的,但是,它无法防止有人删除/更新相同的受限条目,因为在保存过程中不考虑此查询。只有 EntityType 被发送到 SaveChanges。