21

刚开始使用breath.js,因为编码时间明显增加,即管理直接在Javascript 中从服务器访问模型数据(我是这里的新手,所以显然是裸露的!)。

过去,我使用股票 ajax 调用来获取/发布数据到服务器,并且过去我使用了一些不同的客户端工具来提供一些帮助来查询本地数据,例如jLinq

我的问题是这个。在 Javascript 中拥有基本上完整的模型查询访问权限不是很危险吗?我一定遗漏了一些东西,因为它看起来像是一个经过深思熟虑的工具。在过去,我至少控制了可以通过后端查询过程发送给客户端的内容,并且再次使用 jLinq 等我可以过滤数据等。我也可以理解权衡可能与获得直接查询/不重复的本地模型问题,所以是否有人可以对此提供一些见解?

谢谢!

编辑 显然我不是唯一一个,但我猜有一个合理的响应 - 可能会限制使用 DTO 方法或其他方法请求的数据?发布的另一个问题是here

4

3 回答 3

14

暴露完整的商业模式可能很危险。允许对您想要向客户端公开的模型部分进行无限制的查询是很危险的。无论您提供易于查询的 API 还是难以查询的 API,都是如此。

这就是为什么我们的团队对我们如何构建我们的服务非常谨慎。

您应该只公开您的客户端应用程序需要的类型。如果您想限制对某个类型的授权实例的访问,您可以编写仔细规定的不可查询服务方法。微风可以打电话给他们就好了。您不必对每个请求都使用 Breeze 查询工具。您仍将受益于缓存、相关实体导航、更改跟踪、验证、保存捆绑、缓存查询、离线支持。

重复:您的服务方法不必返回 IQueryable。即使它们确实返回 IQueryable,您也可以轻松地编写服务方法来将查询结果限制为仅允许用户查看的那些实体。

幸运的是,您可以在同一个服务或协作服务中混合这两种方法。

微风给你选择。明智地行使这些选择取决于您。走出去,设计您的服务以满足您的要求。

于 2012-12-03T20:11:18.890 回答
4

当你暴露元数据时呢?这不被认为是危险的。恕我直言,从 DbContext 公开元数据是不安全的。我知道您可以在客户端上构建元数据,但关键是尽快做事(如果安全的话)。

于 2012-12-03T12:52:41.027 回答
4

从这个意义上说, Breeze 并不意味着成为您的业务逻辑。请记住,如果您在 Javascript 中执行某项操作,任何人都可以执行此操作,那么您应该根据需要限制您自己的服务数据的可见性。

换句话说,如果您打算让数据公开可见,这对您很有用。但只公开您乐于公开并允许任何人查询的实体;另一种看待它的方式是,您的 API 成为您网站的公共 API(但不是您宣传并告诉所有人使用的 API)。

个人不喜欢以这种方式做事,因为在后端实现的架构上创建了依赖项。如果我想更改我的数据库表,我现在必须考虑我的 Javascript。我在集成和单元测试方面也缺乏。

但是,如果您想在非敏感数据上快速构建网站功能,而无需构建服务方法和各个层的实现,它可以发挥作用。

于 2012-12-02T16:10:01.803 回答