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数据库规则:仅当newData具有具有用户id的子id时应用更新_Firebase_Firebase Realtime Database_Firebase Security - Fatal编程技术网

Firebase数据库规则:仅当newData具有具有用户id的子id时应用更新

Firebase数据库规则:仅当newData具有具有用户id的子id时应用更新,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我正在用这个模式更新列表元素{id:{id:id},并将id子元素与auth.uid进行比较,后者是相同的。由于某种原因,该行返回的权限被拒绝 新数据实际上包装了所有正在侦听的对象,而不仅仅是已更改的“新数据”。所以我需要看得更深一层: ".write": "auth!=null && ( ( newData.val() != data.val() && newData.child

我正在用这个模式更新列表元素
{id:{id:id}
,并将id子元素与
auth.uid
进行比较,后者是相同的。由于某种原因,该行返回的权限被拒绝


新数据实际上包装了所有正在侦听的对象,而不仅仅是已更改的“新数据”。所以我需要看得更深一层:

".write": "auth!=null && (
            (
               newData.val() != data.val() &&
               newData.child('id').val() === auth.uid
            ) 
            || !data.exists()
        )"

我认为这张图片让我对问题有了更好的理解,但你看……我看不出你所写的规则有任何错误,我唯一能想到的是,可能是你在哪里有这些规则的问题。请您再添加一点数据库规则,好吗?请确保您的问题中包含当前您尝试更新的位置的JSON。另外(正如杰里米已经问过的):确保规则是最小的但有效的。现在,我们不知道您将共享的代码片段放在规则文件的何处,这很可能是问题的原因。你们都是对的。为了易读,我没有显示整个规则集,但这是必要的。问题是,我认为newData只引用了不断变化的对象,但它似乎包含了规则正在侦听的所有路径。所以我最终通过添加newData.child('users').child(auth.uid).exists()解决了这个问题
"chats": {
  "$chat": {
    ".write": "auth!=null && ((newData.val() != data.val() && newData.child('users').child(auth.uid).exists()) || !data.exists())"
  }
}