我有一个非常简单的数据结构:
{
"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路径,我无法弄清楚如何不允许用户只是用任何数据覆盖所有article_id路径或删除其他用户收藏夹。我的想法已经用完......
这需要是一个常见问题,需要有一个解决方案。
答案 0 :(得分:0)
"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不能有任何先前的数据,并且新数据必须仅包含当前授权用户的密钥。