Firebase安全规则嵌套
我正在创建一个reddit类型的应用程序。我有一系列的故事,每个故事都有一个标题、描述和一个voteCount。我希望有单独的。为voteCount编写规则,所以我像这样构建了我的规则-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
"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
)属于子级别。