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

时间:2016-06-24 19:42:27

标签: android firebase firebase-realtime-database

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

{
  "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路径或删除其他用户收藏夹。我的想法已经用完......

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

1 个答案:

答案 0 :(得分:0)

Okey家伙,经过几天的挫折,这就是我设法解决这个问题的方法:

"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不能有任何先前的数据,并且新数据必须仅包含当前授权用户的密钥。