访问 Firestore 规则中的父文档字段

2024-04-24

我正在 Firestore 中实现一本食谱书,其中每个用户都可以查看所有用户创建的所有食谱,但只有食谱的原始作者才可以编辑或删除食谱。任何用户都可以创建新配方。

我的问题是,我无法设置子集合的权限以“侦听”子集合父文档的字段。

每个配方文档包含三件事。一个名为name存储菜谱名称的字段称为creatorUID哪里的request.auth.uid创建者 uid 的存储和一个名为的子集合ingredients包含带有一些随机字段的文档。

service cloud.firestore {
  match /databases/{database}/documents {

    function isSignedIn() {
      return request.auth != null;
    }

    match /ListOfRecipes/{recipe} {
        allow read, create: if isSignedIn();
        allow update, delete: if resource.data.creatorUID == request.auth.uid;

        match /{list=**} {
            allow read: if isSignedIn();
            // Should return true if recipe.creatorUID has same value as request.auth.uid
            allow write: if recipe.creatorUID == request.auth.uid;
        }
    }
  }
}

问题是,使用这些规则只能创建配方文档。由于数据库显示,子集合及其文档尚未创建

FirebaseError:[code=permission-denied]:权限缺失或不足。 FirebaseError:权限缺失或不足。

这些调用是从 Angular 客户端及其官方库发出的。


规则不会级联,因此您需要对规则捕获的文档执行所需的任何检查。

一般来说,{x=**}规则常常是一个错误,并且使用=**仅适用于极其特定的用例。

根据您的问题,我假设您的数据模式是这样的:

/ListofRecipes/{recipe_document}/List/{list_document}

在这种情况下,您需要对规则进行如下配置:

service cloud.firestore {
  match /databases/{database}/documents {

    function isSignedIn() {
      return request.auth != null;
    }

    match /ListOfRecipes/{recipe} {
        allow read, create: if isSignedIn();
        allow update, delete: if resource.data.creatorUID == request.auth.uid;

        function recipeData() {
            return get(/databases/$(database)/documents/ListOfRecipes/$(recipe)).data
        }

        match /List/{list} {
            allow read: if isSignedIn();
            allow write: if recipeData().creatorUID == request.auth.uid;
        }
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

访问 Firestore 规则中的父文档字段 的相关文章

随机推荐

  • Google 字体无法在移动设备中加载

    我读过类似的帖子 但这个问题有点不同 我有 rest of the code 在 css 样式文件中我有 body font family Source Sans Pro sans serif rest of the code 它在浏览器中
  • 将新对象附加到 JSON 文件中的数组

    如何将附加对象添加到现有 JSON 文件 即对象数组 中 这是我的 JS 代码 const fs require fs let Human Name John age 20 Human JSON stringify Human null 2
  • 自动完成搜索字符串的多个部分,然后返回最可能的部分

    有点像这个问题 https stackoverflow com questions 824144 how do i use jquery autocomplete for multiple words 我有很多文本片段 每天都会使用很多很多
  • 使用 nokogiri 干式搜索网站的每个页面

    我想搜索网站的每个页面 我的想法是找到页面上保留在域内的所有链接 访问它们 然后重复 我也必须采取措施 避免重复努力 所以开始很容易 page http example com nf Nokogiri HTML open page link
  • Azure Functions 中 PowerShell 脚本的选项在哪里

    我想使用 PowerShell 创建 Azure Function 当我谈到 Azure 希望我选择要创建的函数类型时 唯一可用的语言是 C F 和 JavaScript 我错过了什么吗 如何使用 PowerShell 创建 Azure 函
  • 尝试使用 Comparator 按名称排序、忽略大小写以及先处理空值

    我在使用 Java 8 Comparator 类对项目列表进行排序时遇到问题 我当前的工作比较器如下 comparator Comparator comparing Person getName Comparator nullsFirst
  • Android 中从时间戳获取日期名称

    我有一个类 当它初始化时 它会使用公共 getter 在私有字段中记录初始化时间 public class TestClass private long mTimestamp public TestClass mTimestamp Syst
  • 每个 ajax 请求都会调用 preRenderView

    我正在使用 jquery waypoints 和 jsf 实现无限滚动link http kahimyang info kauswagan code blogs 1405 building a page with infinite scro
  • CSS自定义组合框问题

    我需要一个自定义组合框 所以 我实施了ul 问题是我无法通过单击在顶部打开组合框列表button 展示的同时ul 它移动button到网页底部 Code ul width 100px background color rgb 224 224
  • 在 Emacs 中定义新的工具提示

    我想向 emacs 添加自定义工具提示 更具体地说 每当我将鼠标悬停在符号 函数 变量 名称上时 用我的鼠标我想看到带有符号定义的工具提示 我知道我可以使用 cscope 这样的工具找到此类信息 但我不知道如何找到 将 cscope 的输出
  • 运行烘焙命令时出现 SQLSTATE HY000 2002

    我在运行烘焙命令时遇到问题 我认为它与 mysql 有关 但我在 Stackoverflow 上没有找到此错误的任何解决方案 这是我的app php Datasources gt default gt className gt Cake D
  • Kafka的消息键有什么特别的地方吗?

    我没有看到任何提及消息键 org apache kafka clients producer ProducerRecord key 除了它们可以用于主题分区 我可以自由地将我喜欢的任何数据放入密钥中 还是有一些我应该遵守的特殊语义 该密钥似
  • 分组时间序列(面板)数据的交叉验证

    我使用面板数据 随着时间的推移 我观察许多单位 例如人 对于每个单元 我都有相同固定时间间隔的记录 当将数据分为训练集和测试集时 我们需要确保这两个集是不相交的并且顺序的 即训练集中的最新记录应该在测试集中最早的记录之前 参见例如此博客文章
  • 如何使用可用内存有效地比较 1,000 张图像

    这是一个棘手的问题 我的磁盘中存储了大约 1 000 张图像 我想通过成对比较来找到彼此相似的图像 所以我必须做周围1 000 999 2 https stackoverflow com questions 46958633 generat
  • 如何用 Java 以编程方式下载网页

    我希望能够获取网页的 html 并将其保存到String 这样我就可以对其进行一些处理 另外 我如何处理各种类型的压缩 我将如何使用 Java 来做到这一点 我会使用像样的 HTML 解析器Jsoup http jsoup org 那么就很
  • 如何通过部分名称查找文件夹和文件c#

    在我的硬盘驱动器的特定文件夹中 我存储了许多其他子文件夹和文件 现在我想按部分名称列出这些文件夹和文件名 for example c webapi xx folder c mvctutorial xx folder done webapi
  • Gradlew bundleRelease 不会在 React-Native 中生成发布 apk

    我尝试获取应用程序的apk 我以前也做过 效果很好 但是 我今天尝试使用其他应用程序的获取 apk 但它没有给我发布 apk 为什么 我跟着这些步骤 https facebook github io react native docs si
  • 如何更改 ComboFieldEditor 的内容?

    我想更改其中一个的值ComboFieldEditor取决于另一个ComboFieldEditor在 Eclipse 插件中 例如 如果用户更改package 需要在第二个中填充不同的类ComboFieldEditor The ComboFi
  • 如何拆分 XML

    我的第一篇文章在这里 我已经搜索过 但没有找到我要找的东西 我不太确定需要什么技术来完成以下操作 我使用 Mule 3 3 CE 我需要拆分 XML 文件 我需要在每个分割的 XML 中保留 rootElement 及其属性 所有 XML
  • 访问 Firestore 规则中的父文档字段

    我正在 Firestore 中实现一本食谱书 其中每个用户都可以查看所有用户创建的所有食谱 但只有食谱的原始作者才可以编辑或删除食谱 任何用户都可以创建新配方 我的问题是 我无法设置子集合的权限以 侦听 子集合父文档的字段 每个配方文档包含