【问题标题】:Firebase rules to prevent delete防止删除的 Firebase 规则
【发布时间】:2017-08-03 10:50:12
【问题描述】:

我有一个沿着这条线的东西的火力基础结构 -

root {
 groups {
    gid: {  //group ID
       authid: ... //group creator's uid
       members: { //uid of members
          ...
       }
       posts: {
          ...  //posts ID
       }
    }
  }
}

我想要这些功能 -

  1. 任何用户都可以创建新组。这意味着我需要向所有授权的人授予对“/groups/”的写入权限。但他们不应将 null 设置为整个节点。所以,我可以做到这一点".write":"(!data.exists() && auth.uid != null) || (data.exists() && newData.exists()"
  2. 只有作者可以删除单个组。这意味着我需要 授予作者将单个组节点设置为 null 的权限。这是我卡住的部分。因为,较浅的规则会覆盖较深的规则。所以,如果我只是写

    “组”:{ "$gid": { ".write":"!newData.exists() && data.child('authid').val() === auth.uid" } }

    这将被完全忽略。

  3. 我不希望任何人,甚至作者将 null 设置为组内的各个节点。这意味着作者可以删除整个组,但不能删除成员节点

【问题讨论】:

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


    【解决方案1】:

    现在你要求写操作后没有数据。

    你想要的是要么没有数据

    ".write": "
        (data.exists() && !newData.exists() && data.child('authid').val() === auth.uid)
     || (data.exists() && newData.exists() && data.child('members').child(auth.uid).exists())
     || (!data.exists() && newData.child('authid').val() === auth.uid)
    "
    

    行:

    1. 允许所有者删除。
    2. 允许任何成员进行更新(假设所有者也是成员)。
    3. 允许任何人创建,只要他们让自己成为所有者)。

    【讨论】:

    • 我要求任何人都可以创建群组。创建组的人将成为所有者。但是,不是每个人都可以更新群组。只有会员可以更新,但只有“帖子”节点
    • 这些规则不都是做什么的?我可能遗漏了一些东西,在这种情况下,获得帮助的最佳方法是显示没有执行您想要的操作的代码。
    • 我已经更新了问题。我已经删除了帖子部分和成员部分