Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase安全规则嵌套_Firebase_Angularfire_Firebase Security - Fatal编程技术网

Firebase安全规则嵌套

Firebase安全规则嵌套,firebase,angularfire,firebase-security,Firebase,Angularfire,Firebase Security,我正在创建一个reddit类型的应用程序。我有一系列的故事,每个故事都有一个标题、描述和一个voteCount。我希望有单独的。为voteCount编写规则,所以我像这样构建了我的规则- "stories": { "$story_id": { "title": { ".write": "auth !== null" }, "description" { ".write": "auth !== null" }, "voteCount": { ".write": "ne

我正在创建一个reddit类型的应用程序。我有一系列的故事,每个故事都有一个标题、描述和一个voteCount。我希望有单独的。为voteCount编写规则,所以我像这样构建了我的规则-

"stories": {
  "$story_id": {

    "title": { ".write": "auth !== null" },
    "description" { ".write": "auth !== null" },
    "voteCount": { ".write": "newData.val() === data.val() + 1" },

  }
}
这适用于现有的故事。但是,这不再允许我添加新故事,除非我将.write规则直接添加到$story\u id节点。当然,这会阻止我为voteCount节点使用特殊的.write规则


你知道为什么会发生这种情况吗?

所以用户有
权限。在更高级别上写
权限,但他们只能写遵循特定规则的数据

您需要将其放入
.validation
规则中,而不是
.write
规则中


记住这一点的一个简单方法是,
.write
规则决定谁可以写入数据,而
.validate
规则决定可以写入哪些数据。

谢谢。实际上,我还想限制谁也可以写入voteCount节点。我只是用了一个简化的版本。voteCount安全节点实际上看起来像这样-
“voteCount”:{.write:“auth!==null&&newData.val()==data.val()+1&&auth.uid!==root.child('stories').child($story\u id).child('user').child('id').val()”}
是的,我希望在
中签入
.write
。解决方案的第一步是将数据验证分离到
.validate
规则中。它看起来像最后一个
==中实际上应该有一个
==
。Frank已经暗示了这一点,但直接声明:当前示例失败的原因是没有.write规则允许在$story\u id级别进行写访问。能够访问所有子级仍然不允许写入父路径。所以,auth!=null属于$story_id级别,其余规则(如前所述,应该是
.validate
)属于子级别。