“捕获所有其他”Firebase 数据库规则

2023-12-12

也许我从 SQL 的角度过多地解决了这个问题,但我在理解如何正确限制应该允许哪些子节点填充节点方面遇到了困难。

假设我想记录任意名称的产品。每个产品必须包含一个price,但不允许有其他任何事情。

我天真的方法是添加一个.validate要求 newData 包含的产品的规则price孩子,显式授予对的写访问权限price节点,然后删除所有访问$other节点(有点像 switch 语句中的默认子句):

{
    "rules": {
        "$product": {
            ".read": true,
            ".write": true,
            ".validate": "newData.hasChildren(['price'])",
            "price": {
                ".write": true,
                ".validate": "newData.isNumber()"
            },
            "$other": {
                ".read.": false,
                ".write": false,
            }
        }
    }
}

This does not work. Adding a new product with {"price": 1234, "foo": "bar"} will still be accepted. If I however add a ".validate": false rule to $other, nothing is accepted instead (e.g. {"price": 1234} is not allowed). (I did that wrong, somehow.)

有什么方法可以实现与我在这里尝试做的类似的事情吗?如果不是,限制 Firebase 中数据结构的正确方法是什么?我到底应该这样做吗?如果我不这样做,什么会阻止用户向我的数据库填充垃圾?


您在这里陷入了一些常见的 Firebase 安全陷阱。最常见的是权限向下级联:一旦您授予了树中某一级别的读或写权限,您就无法在较低级别取消该权限。

这意味着这些规则是无效的(因为你已经granted读/写已经高一级):

"$other": {
    ".read.": false,
    ".write": false,
}

要解决这个问题,你必须意识到.validate规则不同:数据仅在以下情况下才被视为有效:all满足验证规则。所以你可以拒绝$other具有验证规则的数据:

{
    "rules": {
        "$product": {
            ".read": true,
            ".write": true,
            ".validate": "newData.hasChildren(['price'])",
            "price": {
                ".validate": "newData.isNumber()"
            },
            "$other": {
                ".validate": false
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“捕获所有其他”Firebase 数据库规则 的相关文章

随机推荐

  • 混合实数和位向量

    我有两个使用实数的 SMT2 Lib 脚本 它们在道德上是等效的 唯一的区别是 一个也使用位向量 而另一个则不使用 这是同时使用实数和位向量的版本 uses both reals and bit vectors set option pro
  • intellij 错误地指出没有为自动装配存储库找到类型的 beans

    我创建了一个简单的单元测试 但 IntelliJ 错误地将其突出显示为红色 将其标记为错误 没有豆子吗 正如您在下面看到的那样 它通过了测试吗 那么它一定是自动装配的吗 我在创建时遇到了同样的问题春季启动应用程序使用他们的 SpringBo
  • C#:异步NamedPipeServerStream理解

    我试图找到任何好的 清晰的异步 NamedPipeServerStream 示例 但找不到任何适合我的示例 我想要 NamedPipe 服务器异步接受来自客户端的消息 客户端很简单 对我来说很好 但我找不到服务器的示例 或者无法理解它是如何
  • VBscript 检查特定时间范围内文件是否存在(可以使用通配符)

    大家早上好 我一直在尝试将 VBscript 放在一起 当脚本执行时 它会从用户那里获取文件路径和文件名 其中可能有通配符 然后 该脚本将检查指定目录中是否有与提供的文件名相匹配的文件 然后查看上次修改日期以查看它是否是在特定时间范围内 即
  • http.request 中的 nodeJS 最大标头大小

    使用nodeJS v0 10 28 http请求中标头内容的大小 长度是否有限制 让我解释 我需要使用第三方提供商提供的休息服务 返回给我的数据位于请求的标头中 正文大部分为空 120 个左右字符 标头中的数据量从几个字符到几百kb不等 v
  • 使用 UPDLOCK 的 LinQ To SQL

    有没有办法将 UPDLOCK 与 LinQ To SQL 一起使用 我有一个场景需要它 Thanks Linq2SQL 目前不支持发出 UPDLOCK 更多信息here and here 如果您需要这样做 您可以将自己的 SQL 包装在 S
  • 多个文件上传[重复]

    这个问题在这里已经有答案了 如何在任何位置上传多个文件 我的问题是 我正在选择多个文件 但是当我单击上传按钮时 仅上传最后一个文件并重命名名称 并且重命名名称是所有文件名附加逗号 如下所示 file1 file2 flie3 这是代码 Fi
  • Swift 动态库是否向后兼容较旧的 Swift 版本项目

    我开始从头开始开发 SDK 我不太确定应该用 Swift 还是 Objective C 来编写它 我觉得 Swift 在很多方面都比 Objective C 更好 但我的主要问题是 Swift 动态库是否支持旧版本的 Swift 假设我在
  • jQuery Datatables 大数据集未捕获类型错误:无法读取未定义的属性“mData”

    因此 我在使用 php 从数据库迭代的一大组行上收到控制台错误 我正在用 metronic 主题初始化它 正如你所看到的 我有我的头部和身体 我怀疑这个问题可能与输出的大小有关 可能需要使用另一种方法 任何指导表示赞赏 table clas
  • PyQt 从用户处获取日期

    我在 Qt Designer 中使用按钮和 QDateEdit 构建了简单的小部件 用户将日期输入到 QDateEdit 中 然后当他按下按钮时 日期将被保存到变量中 我该怎么做 你可以简单地做到这一点 var name self date
  • 获取 Android Context 的各种方法有什么区别?

    在我见过的各种 Android 代码中 public class MyActivity extends Activity public void method mContext this since Activity extends Con
  • Android ListView 设置要显示的项目数

    如何设置列表中显示的项目数而不滚动 示例 我有一个包含 10 项的列表 我希望只显示 3 个项目 并且我必须滚动才能看到其余的项目 我认为列表视图中显示的项目数量取决于列表可用的大小 我会尝试限制列表大小的布局 如此详细的布局可能不太容易实
  • Play-Framework 2.4:使用 Spring 依赖注入与 Play-Framework 代替 Guice

    我在用Spring Depedency注射代替Play Framework Guice依赖注入 由于你的要求 我们需要使用大部分Spring Modules在我们的应用程序中 例如Spring Data Mongodb但问题是 我们的依赖项
  • Spark Read Json:如何读取整数和结构之间交替的字段

    尝试将多个 json 文件读入数据帧 两个文件都有一个 Value 节点 但该节点的类型在整数和结构之间交替 File 1 Value 123 File 2 Value Value On ValueType State IsSystemVa
  • WKWebView中是否可以关闭位置权限?

    我想知道是否可以阻止WKWebView显示位置权限提示 website com 想要使用您当前的位置 我相信它正在显示 因为该网站包含谷歌地图 我对在其位置预加载位置不感兴趣 就像其他问题中所示 我只是不想在 WKWebView 中使用位置
  • 如何在shell脚本中添加进度条?

    在 bash 或 NIX 中的任何其他 shell 中编写脚本时 如果运行的命令需要花费几秒钟的时间 则需要进度条 例如 复制大文件 打开大 tar 文件 您建议使用哪些方法向 shell 脚本添加进度条 您可以通过覆盖一行来实现这一点 使
  • 更好地突出显示当前编辑组

    VSCode 是否提供了突出显示当前内容的方法编辑组 或选项卡 in focus 例如 突出显示一个边界框在焦点组周围用单独的颜色 如下图所示 突出显示当前选项卡在焦点组中 要修改活动选项卡 请参阅https code visualstud
  • 在 React-Native 中使用 AsyncStorage 更新状态的正确方法是什么?

    我正在尝试向服务器发出 GET 请求以检索 JSON 形式的产品列表 然后我想将数据放入 AsyncStorage 中 以便我可以在视图中显示产品 这样做的正确方法是什么 我研究过的内容 on https facebook github i
  • 将Access数据库分为前端和后端

    好的 我分割了我的访问数据库 现在我有了一个后端 如果我在 db be mdb 中启动了一个全新的表 一个全新的查询和一个用于不同目的的品牌表单 当我将其保存在后端时 它会出现在连接 前端 数据库中 还是必须这样做导入它吗 如果我确实必须导
  • “捕获所有其他”Firebase 数据库规则

    也许我从 SQL 的角度过多地解决了这个问题 但我在理解如何正确限制应该允许哪些子节点填充节点方面遇到了困难 假设我想记录任意名称的产品 每个产品必须包含一个price 但不允许有其他任何事情 我天真的方法是添加一个 validate要求