【问题标题】:Prevent data deletion but allow adding and modifying in firebase realtime database?防止数据删除但允许在firebase实时数据库中添加和修改?
【发布时间】:2018-06-21 09:55:02
【问题描述】:

我需要设置数据库规则以防止某些子节点被误删除,但同时允许添加和修改子节点。有问题的节点是users/[userID]。它的结构是这样的:

我不想删除users/[userID]/soundcasts 中的数据。我目前的规则如下所示:

 "users": {
  ".read": true,
  ".indexOn": "stripe_id",
  "$userID": {        
    ".indexOn": "0",
    "soundcasts": {
      ".indexOn": "planID",  
      ".write": "newData.exists() && auth != null",
      "$soundcastID": {
         ".write": "newData.exists() && auth != null",
      } 
    },
  }  
},

这成功地完成了我想要的,即将users/[userID]/soundcasts 设置为null 总是失败。但是,由于users 节点本身没有 .write 规则,我无法向该节点添加新用户:(

但如果我在users 节点或users/[userID] 节点上设置".write": "newData.exists() && auth != null",如下所示:

 "users": {
  ".read": true,
  ".indexOn": "stripe_id",
  "$userID": {        
    ".indexOn": "0",
    ".write": "newData.exists() && auth != null",
    "soundcasts": {
      ".indexOn": "planID",  
      ".write": "newData.exists() && auth != null",
      "$soundcastID": {
         ".write": "newData.exists() && auth != null",
      } 
    },
  }  
},

可以将users/[userID]/soundcasts 子节点设置为null。我不确定为什么会这样。

我需要设置规则,以便我可以向users节点添加新用户,修改users/[userID]下的任何子节点数据,但防止users/[userID]/soundcasts被设置为null。

这可能吗?

【问题讨论】:

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


    【解决方案1】:

    目前无法为一个节点设置写入规则,并为其子节点设置另一组不同的规则。

    我建议在数据库的根节点下创建一个节点soundcasts 来存储这些声音广播,将userID 作为键并将其声音广播放在每个用户下。然后你就可以设置你的“不删除”规则到这个节点:

    "users": {
      ".read": true,
      ".indexOn": "stripe_id",
      "$userID": {
        ".write": true
      }  
    },
    "soundcasts":{
        ".indexOn":"planID",
        "$userID":{
            "$soundcastID": {
                ".write": "newData.exists() && auth != null",
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 2021-11-02
      • 2018-10-09
      相关资源
      最近更新 更多