0

Firebase 允许您拥有验证规则,以确保任何给定节点都存在特定的子节点。例如:

{
  "rules" : {
    "posts" : {
      "$postsID" : {
        ".validate" : "newData.hasChildren(['title','body','authors'])",
        ...

上面,如果我们尝试在 /posts/ 创建一个节点而不给它标题、正文或作者,Firebase 将拒绝我们的请求。

但是,EmberFire适配器中的 updateRecord 函数使用单独的 Promise 来保存关系和模型本身。

因此,在上面的示例中,当我们保存新帖子时,EmberFire可能会在写入 /posts//title 和 /posts//body 之前尝试写入 /posts//authors/。在这种情况下,我们的验证规则将失败。

有几个解决方案浮现在脑海

  1. 修补 ember fire 适配器以使用单个请求而不是使用多个请求将所有更新写入节点。

  2. 修补适配器以使用事务,然后我们可以使用验证。

我想知道是否有其他不涉及修补适配器的解决方案

PS - 这也发布在 Firebase 的 github 问题上 - https://github.com/firebase/emberfire/issues/304

4

1 回答 1

0

不幸的是,你是对的。目前,hasMany关系链接保存在对服务器的一系列单独请求中。这将导致要求至少有一个hasMany链接的安全规则出现问题。

让我们继续在GitHub 问题中讨论这个问题。我们可能会改变适配器的行为。

于 2015-08-13T17:36:33.083 回答