Firebase实时规则访问父母基于子价值
关于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() ",
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当您在实时数据库中的路径上运行查询时,请检查您在查询运行的路径的每个直接子节点下在特定的已知路径下指定的值。
在第二组规则中,您指定了您所关心的孩子的完整路径,因此规则可以在
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 the6e42092aa73f47f48657fe7f3a9610c5
is not in the path you look at, and there is no node atUser/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: