Firebase数据库规则,区分创建和更新

时间:2018-06-15 16:15:55

标签: firebase firebase-realtime-database firebase-security-rules

我想以某种方式区分使用写入规则创建或更新列表。任何用户都可以创建新聊天,而只有该聊天中的用户才能更新它。所以基本上,我希望有一个更新规则,检查另一个非规范化列表,如果该用户在该聊天内部之前能够更新(类似,如果不等于读取规则工作正常)而不违反auth != null规则用于创建新聊天。

"chats": {
  "$chat": {
    ".write": "auth != null",
    ".read": "root.child('chats_by_user').child(auth.uid).child($chat).exists()"
  }
}

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:2)

更新通常意味着newData与现有data不同。

因此,只有让用户在聊天中进行更新的规则是:

"newData.val() != data.val() &&  root.child('chats_by_user').child(auth.uid).child($chat).exists()"

创建意味着该节点下目前没有data

因此,仅允许创建操作的规则是:

"!data.exists()"

现在把它们放在一起:

"chats":{
    "$chat":{
        ".write":"auth!=null && ((newData.val() != data.val() &&  root.child('chats_by_user').child(auth.uid).child($chat).exists()) || !data.exists() )",
        ".read":"root.child('chats_by_user').child(auth.uid).child($chat).exists()"
    }
}