Firebase允许您拥有验证规则,确保任何给定节点都存在特定子节点。例如:
{
"rules" : {
"posts" : {
"$postsID" : {
".validate" : "newData.hasChildren(['title','body','authors'])",
...
上面,如果我们尝试在/ posts /创建一个节点而不给它一个标题,正文或作者,Firebase将拒绝我们的请求。
但是,EmberFire适配器中的updateRecord函数使用单独的promise来保存关系和模型本身。
因此,在上面的示例中,当我们保存新帖子时,EmberFire可能会在写入/发布// title和/ posts // body之前尝试写入/发布// authors /。在这种情况下,我们的验证规则将失败。
有几种解决方案可以想到
修补ember fire适配器,使用单个请求将所有更新写入节点,而不是使用多个请求。
修补适配器以使用transactions,然后我们就可以使用验证。
我想知道是否有任何其他解决方案不涉及修补适配器
PS - 这也发布在Firebase的github问题上 - https://github.com/firebase/emberfire/issues/304
答案 0 :(得分:0)
不幸的是你是对的。目前,hasMany
关系链接保存在一系列单独的服务器请求中。这将导致需要至少有一个hasMany
链接的安全规则出现问题。
让我们继续在GitHub issue中讨论这个问题。我们可能会改变适配器的行为。