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
Android 如何使用安全规则防止用户删除Firebase数据库中特定路径下的所有数据?_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 如何使用安全规则防止用户删除Firebase数据库中特定路径下的所有数据?

Android 如何使用安全规则防止用户删除Firebase数据库中特定路径下的所有数据?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有一个非常简单的数据结构: { "article-favorites" : { "-KKEIhw6SZ9W0tjyj_qO" : { "xn19qiJXmJMDEMzqwB8IQHbHzAG3" : true }, "-KKOd-3pUTrM01L5XIXC" : { "YJnErzTYGoWw6xCO2mQfmP0ftVt1" : true, "xn19qiJXmJMDEMzqwB8IQHbHzAG3" : true }

我有一个非常简单的数据结构:

{
  "article-favorites" : {
    "-KKEIhw6SZ9W0tjyj_qO" : {
      "xn19qiJXmJMDEMzqwB8IQHbHzAG3" : true
    },
    "-KKOd-3pUTrM01L5XIXC" : {
      "YJnErzTYGoWw6xCO2mQfmP0ftVt1" : true,
      "xn19qiJXmJMDEMzqwB8IQHbHzAG3" : true
    },
    "-KKPxI9Z40e0Lq8Oa00L" : {
      "xn19qiJXmJMDEMzqwB8IQHbHzAG3" : true
    }
  }
}
其中第一个键是项目id,第二个键是用户id。 以下是我的规则:

"article-favorites": {
  "$article_id": {
    ".read": "auth != null",
    "$uid": {
      ".write": "$uid == auth.uid"
    }
  }
}
这些规则的问题是,用户将永远不被允许收藏一篇文章,因为他将不被允许创建一个新的article_id条目。但是,如果我再次向article_id path添加write规则,我就无法理解如何不允许用户仅仅用任何数据覆盖所有article_id path或删除其他用户收藏夹。我已经没有主意了


这是一个常见的问题,需要有一个解决方案。

好了,伙计们,在经历了几天的挫折之后,我就是这样设法解决这个问题的:

"article-favorites": {
    "$article_id": {
    ".read": "auth != null ",
    ".write": "auth != null && !data.exists() && newData.val().length == 1 && newData.child(auth.uid).exists()",
    "$uid": {
      ".write": "$uid == auth.uid"
    }
  }
}

为了解释,uid检查保持不变,但为了允许写入新的article_id条目,该id不能有任何以前的数据,并且新数据必须只包含当前授权用户的密钥

我的问题是,我以前认为在同一棵树中没有两个“.write”规则,因为第一个规则覆盖了所有更深层次的规则,但它只在返回“true”时覆盖。