Firebase 安全规则错误“对象上未定义属性资源”

2023-12-29

我有一个函数(并且我已经在没有函数的情况下对其进行了测试,只是为了检查参考或其他内容是否没有问题):

function resourceIsValidSomething() {
  return request.resource.data.something is string ...;
}

进而:

allow create: if request.auth != null && resourceIsValidSomething();

and

allow update: if request.auth != null && resourceIsValidSomething();

但我在测试时收到此错误消息更新规则:

错误:simulator.rules 行 [19],列 [17]。对象上未定义属性资源。

根据文档 https://firebase.google.com/docs/firestore/security/rules-conditions#data_validation,我的规则应该是正确的。

我究竟做错了什么?

真实例子:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    function isGod() {
        return get(/databases/$(database)/documents/employees/$(request.auth.uid)).data.role == 'god';
    }

    function allowedUser() {
        return request.resource.data.assignedTo.uid == request.auth.uid || isGod();
    }

    match /stores/{storeId} {
        allow read: if request.auth != null;

        match /imeis/{imeiId} {

        function resourceIsValidImei() {
            return request.resource.data.imei is string && 
            request.resource.data.imei.size() > 0 &&
            request.resource.data.type is string &&
            request.resource.data.type.size() > 0 &&
            request.resource.data.dateAdded is timestamp &&
            request.resource.data.createdBy.uid == request.auth.uid;
        }

        allow read: if request.auth != null;

        allow create: if request.auth != null &&
            isGod() && resourceIsValidImei();

        allow update: if request.auth != null && allowedUser();
      }

“对象上未定义属性资源”

您不能在 Firebase 规则表达式中使用不存在的属性。

例如,以下内容将引发类似的错误。

read: if request.foobar == 'some value';

那是因为foobar不存在,并且规则会提出它是undefined。与'some value'右侧的情况永远不会发生,并且不会评估其余的规则表达式。

类似的对象request实施Map()界面。

https://firebase.google.com/docs/reference/rules/rules.Map https://firebase.google.com/docs/reference/rules/rules.Map

所以你可以使用重写你的规则Map.get()方法不会引发错误并为缺失的条目提供默认值。

read: if request.get('foobar', null) == 'some value';

所以现在我们可以安全地引用foobar在我们的规则中。

我有一个函数(并且我已经在没有函数的情况下对其进行了测试,只是为了检查参考或其他内容是否没有问题):

并非规则中的所有请求都会产生resource。如果该文档不存在resource属性于request从未设置。因此尝试读取它会产生上述错误。您可以通过检查来解决此问题null.

function resourceIsValidSomething() {
  return request.get('resource', null) != null && request.resource.data.something;
}

您可能仍然会收到类似的规则错误false for "get" & L10

那是因为request.get('resource', null) != null检查将导致规则失败。您可以决定allow访问不存在的文档以便完成查询。

该规则看起来像这样。

function resourceIsValidSomething() {
  return request.get('resource', null) == null || request.resource.data.something;
}

因此,允许访问缺失的资源或仅访问具有data.something.

由您决定哪种方法最适合您的用例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase 安全规则错误“对象上未定义属性资源” 的相关文章

随机推荐

  • BigInteger阶乘的并行计算

    作为 BigDecimal 库的一部分 我需要计算任何给定非负整数的阶乘 所以我使用 Net 4 0System Numerics BigInteger能够存储大量数字 这是我正在使用的函数 private BigInteger Facto
  • C# 和 F# lambda 表达式代码生成

    让我们看一下 F 为简单函数生成的代码 let map add valueToAdd xs xs gt Seq map fun x gt x valueToAdd 生成的 lambda 表达式 F 函数值的实例 代码将如下所示 Serial
  • 使用 gmail 从 devise on Rails3 发送的确认电子邮件未到达

    我已经设置了以下内容 config environments development rb 29 ActionMailer Base delivery method smtp 30 ActionMailer Base perform del
  • 如何使用隐藏的 iframe + jquery 进行文件上传?

    我们都知道单独使用 jquery 是不可能完成文件上传的 但可以使用 jquery 和隐藏的 IFrame 来解决这个问题 我已经使用这种方法找到了四种解决方案 但不知道如何实现它们 这个解决方案可以在 Stackoverflow 上找到
  • Android 中的默认字体系列是什么?

    从 API 16 开始 Jellybean Roboto 被引入作为可用的字体系列 了解 Android 16 中的 新功能 here https developer android com about versions android 4
  • 将 StreamReader(String) 转换为与 UWP API 兼容?

    我在使用 StreamReader 类时遇到了障碍 上StreamReader类 https msdn microsoft com en us library system io streamreader aspx文档页面 它指出 在版本信
  • 我们可以在视图分页器中将两个子片段嵌套在一个父片段内吗?

    我有一个视图寻呼机 在其中一个选项卡中我有父片段 其中包含两个子片段 候选人名单是具有框架容器的父片段 我替换了一个子片段 候选列表片段 在该容器内 但是当我在其中替换另一个子级 候选事件开始 时 它说未找到视图 我用来替换父片段容器内的第
  • ValueError:在图中找不到轴实例参数

    我正在通过 学习 scikit learn Ra l Garreta 的 Python 机器学习 来学习 scikit learn 在 jupyter Notebook 中 来自代码In 1 to In 7 有用 但In 8 代码不起作用
  • 使用 FTPClient.getModificationTime 在 FTP 服务器中获取文件的上次修改日期会产生 null

    我试图从 FTP 环境中获取文件的最后修改日期 结果不符合预期 通过使用ftpClient getModificationTime File path 我正进入 状态null 通过使用FTPFile getTimestamp getTime
  • JavaScript 哈希图等效项

    正如更新 3 中所明确的这个答案 https stackoverflow com questions 367440 javascript associative array without tostring etc 367454 这个符号
  • 当我启动实例时,ECU单元、CPU核心和内存意味着什么

    当我在 EC2 上启动实例时 它为我提供了 t1 micro m1 small m1 large 等选项 有 vCPU ECU CPU 核心 内存 实例存储的比较表 这是系统的内存RAM吗 我无法理解所有这些术语的含义 谁能给我清楚地说明这
  • Next.js 链接和路径

    我的标题中有一个弹出菜单显示产品 单击第一个时 无论列表中的哪一个 它都会正确导航到路径 products some product 但是 如果我已经在其中一个产品页面上 并且我正在尝试导航到另一个产品 它会添加 products 再次在
  • WPF:MenuItem 内的按钮,关闭菜单

    我在 MenuItem 的标题中有一个按钮 单击菜单项 不是按钮部分 会按预期关闭菜单 但单击按钮doesn t关闭菜单 我想要它 我怎样才能解决这个问题 更多背景 我有两个命令 它们互为微小变体 我想将它们都放在菜单中 大多数情况下都会使
  • 基于几何形状检测图像上的物体

    我对图像处理有了基本的了解 现在正在深入学习冈萨雷斯的 数字图像处理 一书 当给定图像和感兴趣对象的近似形式已知时 例如圆形 三角形 在图像上找到该对象的最佳算法 方法是什么 物体可能会轻微变形 因此强力方法无济于事 您可以尝试使用定向梯度
  • 使用elasticsearch对文本进行分类

    我目前正在开展一个项目 该项目涉及从文本中识别不同的 关键字 作为示例 我们假设以下输入文本 这是在布宜诺斯艾利斯写的一些关于肉类的文本的示例 进一步假设我的 elasticsearch 实例存储了以下文档 城市 巴塞罗那 布宜诺斯艾利斯
  • 从图像中分类和提取填字游戏网格的算法

    我正在寻找算法 给定包含填字游戏的图像 将图像裁剪为仅填字游戏 区分regular http crossword info sample cryptic demo and barred http crossword info sample
  • 仅在单元测试成功后,Maven 多模块才会部署到存储库

    问题 执行 mvn 部署 的最佳解决方案是什么 以便仅在所有单元测试成功并且不重复处理步骤后才运行部署部分 我希望简单的答案是 执行 maven 命令 x 或使用标志 以便可以在不调用默认生命周期中的先前目标的情况下运行部署 遗憾的是 这似
  • 如何在 Python OpenPyXL 中更改字体大小

    如何更改单元格的字体大小 我正在使用 OpenPyXL 如果我没有用完美的语法和拼写输入上面的内容 它不会让我发送这个问题 所以最后几个字人们应该知道我的意思 这对我有用 from openpyxl styles import Font f
  • Visual Studio 2015 的 github 扩展失去连接

    我偶尔会收到此错误 这真的很烦人 因为有时它会自行修复 但大多数情况下我只需关闭 VS 并重新打开 然后它就会再次工作一段时间 当我尝试从分支 或任何其他 git 网络交互 中拉取时 就会发生这种情况 Error encountered w
  • Firebase 安全规则错误“对象上未定义属性资源”

    我有一个函数 并且我已经在没有函数的情况下对其进行了测试 只是为了检查参考或其他内容是否没有问题 function resourceIsValidSomething return request resource data somethin