Firebase规则如果删除了父级,则如何完成添加或更新值

时间:2017-09-13 09:36:10

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

我在问我是否有这个firebase数据库

Misters
 + 7m1fyYchDscr8tUeI13uPXvdDvM2
 + gvTVc3gwRfTz3WL48vTGiiiTKZ22
 - vWZ55LGiraaIErIiiVN4NVQc6Eh1
     active_type:true
     age: 27

如果父节点已删除,如何阻止添加新节点或更新现有节点 (vWZ55LGiraaIErIiiVN4NVQc6Eh1)?

例如,我有防止更新的规则

{
    "rules": {
        ".read": true,
        ".write": "auth != null",
        "Misters": {
            "$Misterid": {
                "active_type:true": {

                    ".validate": "(data.val() == null) || (data.isString() && (data.val().length == 0))"
                }
            }
        }
    }

但我想阻止父母找不到

3 个答案:

答案 0 :(得分:1)

基本上会发生的是,如果我理解正确,你的写操作将重新创建已删除的“vWZ55LGiraaIErIiiVN4NVQc6Eh1”。

所以我会做这样的事情:

{
    "rules": {
        ".read": true,
    ".write": "auth != null",
    "Misters": {
        ".write" : "root.child('Misters').hasChild(<Misterif>)"
        "$Misterid": {
            "active_type:true": {

                ".validate": "(data.val() == null) || (data.isString() && (data.val().length == 0))"
            }
        }
    }
}

答案 1 :(得分:1)

  1. 将所有添加的$ Misterid存储在名为MistersAdded的新节点中。这可以通过使用云功能
  2. 自动完成
  3. 添加以下规则
  4. 这包括一个exists()方法,它将检查MistersAdded映射以查看它是否曾被创建过。如果您希望能够让用户删除地图,请添加“ ||”写规则背后的data.val()== null

    {
        "rules": {
            ".read": true,
            ".write": "auth != null",
            "Misters": {
                "$Misterid": {
                    "active_type:true": {
                        ".write": !root.child('MistersAdded').child($Misterid).exists()
                        ".validate": "(data.val() == null) || (data.isString() && (data.val().length == 0))"
                    }
                }
            }
        }
    

答案 2 :(得分:1)

你真的想在&#34;规则中做到这一点吗?这意味着您无法选择逻辑应用。我建议以编程方式进行。

syn0

我希望有所帮助。这样做意味着您可以做的不仅仅是验证,甚至可以通知您的用户并执行UI操作。