基于子值的 Firebase 实时规则访问父级

Firebase realtime rule access parent based on child value

关于firebase realtime rule的帖子很多,但还是解决不了我的问题。

这是我的数据。可能有多个“GId”或多个“User”或多个“caregiver”。

如果“caregiver”中存在特定值,我想授予对“GId”的访问权限。我的以下规则不起作用。

{
  "rules": {
    "GId": {
      "$GId": {
        ".write": "data.child('User').child('caregiver').child('-N0Uy6K55bQlkPuuoioA').exists() ",
        ".read": "data.child('User').child('caregiver').child('-N0Uy6K55bQlkPuuoioA').exists()",
      }
    }
  }
}

但是,如果我更改规则以在“用户”中存在特定值时授予对“GId”的访问权限,则它会起作用。 你能告诉我我的第一条规则有什么问题吗?

是否可以将其他“GId”访问权限授予另一个“GId”中的某些“用户”?

{
  "rules": {
    "GId": {
      "$GId": {
        ".write": "data.child('User').child('6e42092aa73f47f48657fe7f3a9610c5').exists() ",
        ".read": "data.child('User').child('6e42092aa73f47f48657fe7f3a9610c5').exists() ",
      }
    }
  }
}

当您 运行 查询实时数据库中的路径时,会检查您在查询 运行s.

在您的第二组规则中,您指定了您关心的 child 的完整路径,因此该规则可以找到 $GIdUser/6e42092aa73f47f48657fe7f3a9610c5 处的节点.然而,在第一组规则中,6e42092aa73f47f48657fe7f3a9610c5 不在您查看的路径中,并且在 $GId.

正下方的 User/caregiver/-N0Uy6K55bQlkPuuoioA 处没有节点

要使规则生效,您需要展平数据结构,并可能设置一个反向索引,以便您可以根据您做[=32]的信息查找是否允许访问=]知道。我还建议重新考虑 nesting of multiple data types in a single branch in your data structure, as it's a common antipattern and Firebase recommends keeping the data flat.

另见:

  • Firebase Query Double Nested