【问题标题】:Firebase database rules: accesing child data from parent [duplicate]Firebase 数据库规则:从父级访问子级数据 [重复]
【发布时间】:2017-01-16 19:16:17
【问题描述】:

这里是对象列表的规则。如果您已通过身份验证,则可以访问所有内容。如果不是,有些对象是公开的,有些不是(布尔公共属性)。 如果您尝试直接访问该对象,则 $object 的以下规则可以正常工作。

"list": {
  ".read": ???????????? ,
  ".write": "auth != null",
  "$object": {
    ".read": "auth != null || data.child('public').val() === true",
    ".write": "auth != null"
  }
}

但如果您未通过身份验证,我还需要规则来仅列出公共对象。如何在其父列表中为其生成的 $key 的属性设置读取规则?比如:

"list":{
  ".read": "auth != null || data.child('$key').child('public').val() === true"
}

【问题讨论】:

  • Mathew 在下面解释它,但也请参阅 stackoverflow.com/a/14298525/209103(可能还有大多数其他提到“规则不是过滤器”这个神奇短语的问题)。

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


【解决方案1】:

您不能通过 .read 进行过滤

发件人:https://firebase.google.com/docs/database/security/securing-data

规则不是过滤器

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

【讨论】:

  • 是的,我读到了。这就是为什么我试图将 .read 条件从孩子传递给父母。但是必须有一种方法来过滤服务器端用户在列出对象时可以看到或看不到的内容。我错了吗?
  • 不,你不能,这正是这句话的意思。如果您想按用户过滤它,则必须按用户将其存储在其他地方。
  • 因此,如果不涉及身份验证,您只能在显示整个列表或不显示任何内容之间进行选择?
  • 不确定我是否理解,但规则无法过滤,但我认为答案是肯定的。您可以根据排序等进行过滤...
  • 确实是这样。 Firebase 对您附加侦听器的位置实施访问控制。所以要么你有list的阅读权限(在这种情况下你可以阅读它下面的所有内容)或者你没有。
猜你喜欢
  • 1970-01-01
  • 2018-08-04
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
相关资源
最近更新 更多