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”时覆盖。