Firebase实时数据库规则(所有规则都可以读取,但只能编辑所有者)

Firebase实时数据库规则(所有规则都可以读取,但只能编辑所有者),firebase,firebase-realtime-database,nosql,Firebase,Firebase Realtime Database,Nosql,到目前为止,我一直在使用这个规则配置 { "rules": { "items": { ".read" : true, "$uid": { ".read" : true, ".write": "auth != null && auth.uid == $uid" } } } } 省略了验证和其他目录。 /items/user1/item1 /items/user2/item1 所有可读取项目

到目前为止,我一直在使用这个规则配置

{
  "rules": {
    "items": {
      ".read" : true,
      "$uid": {
        ".read" : true,
        ".write": "auth != null && auth.uid == $uid"
      }
    }
  }
}
省略了验证和其他目录。 /items/user1/item1 /items/user2/item1

所有可读取项目目录和所有用户项目(无专用项目)

我需要什么

项目平面阵列

"items" : {
     "item1": {},
     "item2": {}
}
以userId作为属性

"item1" : {
    "uid": "userId"
}
只有用户创建的项目可以编辑/删除它,但所有人都可以看到它

我在考虑不同目录中的两个项目,例如

"public_items": {
         "item1": {},
         "item2": {}
}


"items": {
   "userId": {
      "item1": {},
      "item2": {},
   }
}
但这似乎不是一个好主意

规则是以原子的方式应用的。这意味着读或写 如果该位置没有规则,操作将立即失败 或者在授予访问权限的父位置。即使每个人都受到影响 子路径可访问,在父位置读取将失败 完全是。


如果无法为每个项目应用规则,如何构建具有不同所有者的项目目录?

您只能使用
/items/itemId/uid
来处理此问题

{
  "rules": {
    "items": {
        ".read" : true,
        "$itemId": {
            ".write": "(!data.exists() && newData.child('uid').val() == auth.uid ) || (data.child('uid').val() == auth.uid && newData.child('uid').val() == auth.uid)"
        }
    }
  }
}
上述规则是一种可能的解决方案。我们允许任何人阅读
项目
中的所有内容。但只有拥有该项目的用户(
/itemId/uid
)才能创建/编辑该项目。此外,我们还强制新的或编辑的项目具有用户id