Firebase实时规则访问父母基于子价值

发布于 2025-01-23 19:13:01 字数 1033 浏览 0 评论 0 原文

关于Firebase实时规则有很多帖子,但我仍然无法解决问题。

这是我的数据。可能有多个“ GID”或多个“用户”或多个“护理人员”。

如果“护理人员”中存在特定值,我想授予对“ 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() ",
      }
    }
  }
}

There are many posts about firebase realtime rule but I still cannot solve my problems.

This is my data. There may be multiple "GId" or multiple "User" or multiple "caregiver".

enter image description here

I want to grant access to "GId" if a specific value exists in "caregiver". My following rule does not work.

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

But if I change the rule to grant access to "GId" if a specific value exists in "User", it works.
Could you please show me what is wrong with my first rule?

Is it possible to grant other "GId" access to only some "User" in another "GId"?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心凉怎暖 2025-01-30 19:13:01

当您在实时数据库中的路径上运行查询时,请检查您在查询运行的路径的每个直接子节点下在特定的已知路径下指定的值。

在第二组规则中,您指定了您所关心的孩子的完整路径,因此规则可以在 user/6e42092a73f48657f48657fe7f3a9610c5 下找到节点。 。在第一组规则中,但是 6E42092AA73F47F48657FE7F3A9610C5 不在您查看的路径中,并且在 use/caregiver/-n0uy6k55555555555555bqlkpuooioa> $下没有节点。 gid

要使规则工作,您需要将数据结构弄平,并可能设置一个逆索引,以便您可以查找是否允许访问您 do do 知道的信息。我还建议您重新考虑 在您的数据结构中,因为它是一个常见的对抗图案,而火箱建议保持数据平坦

另请参阅:

When you run a query on a path in the Realtime Database checks for the value you specify at a specific, known path under each direct child node of the path where the query runs.

In your second set of rules, you specify the full path of the child whose existence you care about, so the rule can find the node at User/6e42092aa73f47f48657fe7f3a9610c5 under the $GId. In the first set of rules however the 6e42092aa73f47f48657fe7f3a9610c5 is not in the path you look at, and there is no node at User/caregiver/-N0Uy6K55bQlkPuuoioA directly under $GId.

To make the rules work you will need to flatten your data structure, and possibly set up an inverse index so that you can look up whether access is allowed given the information that you do know. I'd also recommend reconsidering the 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.

Also see:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文