【问题标题】:Security rules dont cascade like the docs said安全规则不会像文档所说的那样级联
【发布时间】:2021-01-30 06:59:40
【问题描述】:

安全规则不会像文档所说的那样级联。

此图展示了使用模拟器完成对路径/foo/baz/bar/ 的授权读取请求的结果。

Firebase 文档这样说(代码示例与文档相关):

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}

.read 和 .write 规则级联,因此此规则集授予对 路径 /foo/ 中的任何数据以及任何更深层次的路径,例如 /foo/bar/baz.请注意,.read 和 .write 规则在 数据库覆盖更深层次的规则,因此对 /foo/bar/baz 的读取访问权限将 即使路径中的规则仍然在此示例中被授予 /foo/bar/baz 评估为假。

为什么会得到相反的效果?

【问题讨论】:

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


    【解决方案1】:

    允许访问级联,拒绝访问不会。如果拒绝访问具有相同的级联效果,则规则将变得冗长,因为您必须明确排除数据库的每个部分不想即使在拒绝时也会受到影响。

    把规则想象成一个大的或语句——它一个接一个地遍历每个匹配的规则,直到找到一个true

    rule1 || rule2 || rule3 || rule4 ...
    

    【讨论】:

    • 我认为所有规则都是级联的,而不是具体的 allow。现在我更好地理解了整个规则 - 是的,将规则视为一个大的 OR 语句确实有很大帮助。我相信有关仅适用于 allow 规则的级联效果的信息在文档中不可用 - 如果没有,您是如何发现的?
    • 我在 Firebase 工作并且在系统方面拥有多年经验,所以我不记得我最初是如何发现的,但听起来我们有机会改进我们的文档! :)
    • 这很酷,我必须说它非常整洁,如此高质量的服务提供免费计划。无论如何,如果文档明确说明此信息,将不胜感激。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2019-03-03
    相关资源
    最近更新 更多