Firestore 安全规则中的递归通配符未按预期工作

2023-11-24

我有一个像这样的数据结构(收藏 and 文件而不是JSON当然,但你明白了):

{
   users: {
      user1:{
         name: Alice,
         groups: {
            groupA:{subbed:true},
            groupB:{subbed:true}
         }
      },
      user2:{
         name: Bob,
         groups: {
            groupC:{subbed:true},
            groupD:{subbed:true}
         }
      }
   }
}

基本上,这是注册用户 ID 和每个用户订阅的组 ID。我想编写一个安全规则,仅当用户是当前的身份验证用户时才允许访问用户配置文件和子集合,并且根据我对文档的阅读,我认为通配符可以实现此目的...

match /users/{user=**}{
   allow read,write: if user == request.auth.uid;
}

有了这个,我就可以阅读user文档很好,但当我尝试阅读时出现权限错误groups子集合。我只能通过显式匹配子集合来使其工作......

match /appUsers/{user}{
   allow read,write: if user == request.auth.uid;

   match /groups/{group}{
      allow read,write: if user == request.auth.uid;
   }
}

...所以我的问题是,这两个示例之间有什么区别以及我对递归通配符的误解是什么?我以为{user=**}第一个示例的一部分应授予对user文档及其所有子集合、子子集合等无限(对于授权用户),并且应该消除专门为存储在较低位置的数据编写规则的需要,就像我在第二个示例中必须做的那样。

我只在 Firestore 上摆弄了很短一段时间,所以这可能是一个真正愚蠢的问题:)

谢谢大家


The Firebase 文档在使用递归 while 卡时有点令人困惑。我在测试中发现,我需要设置两条规则来授予用户写入用户文档和所有子集合(及其子文档)的权限,这是管理用户数据的最合乎逻辑的设置。

您必须设定两条规则。

  1. 授予用户权限/用户/{用户ID}文档
  2. 授予用户对所有子集合及其从以下位置开始的子文档的权限/用户/{用户ID} path.

    service cloud.firestore { match /databases/{database}/documents { match /users/{userId} { allow read, write: if request.auth.uid == userId; } match /users/{userId}/{document=**} { allow read, write: if request.auth.uid == userId; } } }

Rules

抱歉包含图像。我无法正确格式化它们。

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

Firestore 安全规则中的递归通配符未按预期工作 的相关文章

  • 集合组查询是否需要{path=**}?

    我通读了集合组查询文档 https firebase google com docs firestore security rules query secure and query documents based on collection
  • Firebase 函数,在用户不活动 15 分钟后运行

    我创建了一个 firebase 存在系统 如图所示在 Firebase 中建立影响力 https firebase google com docs firestore solutions presence文档 现在 我尝试在用户离线 15
  • 从 Firestore 获取文档时,我是否也获取该文档内的集合?

    如果是的话 如何获得它 因为在进行文档引用时 您只能访问该文档的字段 而不能访问集合 从 Firestore 获取文档时 我是否也得到了 该文档内的集合 不 当获取文档时 您只会获取该文档的字段 正如本节中所解释的document http
  • React Native 无法访问 Cloud Firestore 后端

    我之前使用的是 firebase 实时数据库 但现在想切换到 Cloud Firestore 但即使经过身份验证 也会收到以下错误 我目前正在使用 Android Simulator 尝试禁用我的实时数据库 但找不到解决方案 Firebas
  • 通过 firebase 登录获取更大的 Facebook 图片

    我正在使用 firebase 通过 facebook 登录用户 这一切都工作正常 我可以获取用户 FB 个人资料图像 尽管它太小了 有人可以告诉我如何获得更大的 我正在使用的代码 override func viewDidLoad let
  • Firestore 规则和带有可变键的自定义声明

    我正在寻找一种使用自定义声明来保护我的应用程序的方法 但我很难在 firestore 规则中访问它们 我的用户可以是多个 比如 1 到 5 个 组织的员工 我希望将 oganizationId 作为用户自定义声明中的关键 并将角色作为值 像
  • Flutter:CachedNetworkImage不缓存图像

    我有一个从 Firebase 存储中检索图像的小部件 但现在我想缓存这些图像 以使用户体验更加简洁 并且还避免对 Firebase 的不必要的调用 所以我找到了 CachedNetworkImageProvider 它听起来像是我想要的一切
  • 删除 Firestore 中非常大的集合

    我需要删除 Firestore 中非常大的集合 最初我使用客户端批量删除 但是当文档发生变化并开始通过注释阻止这样做时 不建议从 iOS 客户端删除集合 不建议从 Web 客户端删除集合 不建议从 Android 客户端删除集合 https
  • 无法禁用 Firestore 中的离线数据

    从我的数据中删除数据后Firestore Database 这需要我的Android app一段时间后才意识到数据已被删除 我认为这是由于自动数据缓存而发生的 我的应用程序与离线使用无关 我想禁用此功能 我已将其添加到我的自定义中Appli
  • Angular Firebase 电子邮件验证验证后错误

    我正在使用电子邮件和密码设置授权功能 一切正常 但当我创建新用户时 应用程序会发送一封带有验证链接的电子邮件 验证电子邮件地址后 我想登录 以便返回登录表单 emial verified 保持在 假 状态 在我硬重新加载页面后 这是 真 但
  • 如何在不下载子项的情况下从 Firebase 获取子项密钥?

    我有一个 Firebase 数据库 其中的节点 items 有很多子项 我想导入子项键的列表 由于每个子项都包含相当多我对此不感兴趣的数据 因此我想仅下载子项密钥 以最大程度地减少传输的数据量 为了便于说明 假设我有以下数据结构 然后我想获
  • 如何在 Firebase 上扁平化数据

    我正在开发一个应用程序 用户可以在类别中发布产品 我正在使用 firebase 并且正在尝试展平数据库中的数据 但我不确定帖子与类别的连接 这是数据库设计 categories category1 id 1 name computers c
  • Firebase 邀请发送电子邮件,但不发送短信。返回结果代码 0

    我正在尝试使用 Firebase 在我的 Android 应用程序中实现应用程序邀请系统 该代码与他们中给出的完全相同guide https firebase google com docs invites android private
  • Firebase 查询 - 查找包含字符串的子项

    我在使用 Firebase 查询时遇到了一些问题 我想查询对象 其中对象子值包含特定字符串 到目前为止 我有一些看起来像这样的东西 Firebase ref Firebase alloc initWithUrl https dinosaur
  • 缓存 Firebase 请求的云函数并且仅在成功编辑配置文件后重新缓存的示例

    在我的应用程序中 用户个人资料向公众开放 并且仅由个人资料所有者更新 个人资料网址是example com email protected cdn cgi l email protection 并根据文档https firebase goo
  • RecyclerView 来自 Firebase 的部分和数据

    您好 我正在开发一个应用程序 在其中我必须使用 Firebase 填充数据回收器视图 准备就绪 现在我想做的是用 data firebase 填写一个 recyclerview 但有一些部分将成为托管 data firebase 的父级 我
  • FirebaseAuth 类现在缺少“getCurrentUser()”方法?

    Firebase 昨天工作得很好 但今天早上我打开我的项目却发现FirebaseAuth类现在没有任何参考FirebaseUser班级 我找不到getCurrentUser method The 谷歌文档仍然显示它存在 https fire
  • 应用程序关闭时监听 firebase 数据库更改

    我正在使用 firebase 创建一个 Ionic 2 应用程序 当应用程序关闭时 即在前台 后台和终止 我需要一种方法来侦听数据库更改 特别是在 child added 上 基本上 我想使用 WebRTC 在应用程序内拨打电话 例如 Wh
  • iOS上传崩溃报告符号文件失败

    Users appledev018 LarsonApp Pods FirebaseCrash upload sym util bash 335 错误 curl 以非零状态 35 退出 hello 命令 bin sh 发出错误 但未返回非零退
  • 如何以编程方式在 Android 中的特定 firebase FCM 注册令牌上发送推送通知

    我想知道有什么方法可以在特定的 FCM 注册令牌 设备令牌 上以编程方式发送推送通知 我已经实现了群聊 但陷入了一对一的聊天 我根本不想使用任何网络服务或任何后端 因为我在我的应用程序中使用 Firebase 数据库和存储作为后端 我想将上

随机推荐

  • 目前是否有无需身份验证即可获取 Instagram 用户媒体的方法?

    直到最近 还有多种无需 API 身份验证即可检索 Instagram 用户媒体的方法 但显然 该网站停止了所有这些 一些old方法 https api instagram com v1 users user id media recent
  • 有没有一种方法可以在不分配任何内存的情况下对数组进行排序?

    我需要非常频繁地对相当大的集合 数百 低数千个项目 进行排序 即每帧以 60 fps 进行排序 我使用的是 Unity 计算每个项目的密钥有点慢 因此需要缓存 我尝试过各种方法 List Sort 与 IComparer 每次都计算键 超级
  • 未命名命名空间内名称的外部链接

    根据C 标准第3 5 4条 未命名的命名空间或直接或间接声明的命名空间 在未命名的命名空间内具有内部链接 同时在第 7 3 1 1 段中我们有注释 96 尽管未命名命名空间中的实体可能具有外部链接 它们通过其翻译特有的名称进行有效限定 单元
  • 本地通知在 ios10 中不触发

    我在用着UNUserNotificationCenter对于 ios 10 为了进行测试 我将本地通知设置为从当前时间开始 10 秒 这就是我尝试过的 void viewDidLoad super viewDidLoad UNUserNot
  • HTML 将 WebGL Canvas 保存为图像

    我在用https github com auduno clmtrackr 我试图从以下示例中保存图像 https github com auduno clmtrackr blob dev examples facedeform html 问
  • 在客户端访问数据库就像在服务器端使用meteor一样

    我在文档中读到了这个 数据库无处不在 使用相同的透明 API 来访问您的 来自客户端或服务器的数据库 这很棒 但我认为存在一些安全问题 在客户端提供对数据库的完全透明的访问 您会遇到不良用户 他们会修改您的 JS 代码 实际上是在他的浏览器
  • svcutil.exe - 生成的代理不允许可空字段

    我试图通过使用 svcutil exe 创建 WCF 代理来使用使用 WSDL 指定的 Web 服务 但 WSDL 指定某些操作具有可选参数 minOccurs 0 例如
  • 从非托管 C++ 应用程序调用 C# dll,无需 COM

    有没有办法在不使用 COM 的情况下从 C 非托管应用程序调用 C DLL 您可以使用以下方法执行此操作Reverse P Invoke 示例和讨论here
  • ReSharper 6.1 是否可以与 Visual Studio 2012 配合使用?

    Resharper 6 1 支持 Visual Studio 2012 吗 我可以在 VS2010 上使用它 但想知道我是否需要升级到 ReSharper 7 0 以获得 VS2012 的支持 如果我这么做的话 我会很失望 捷脑公司承认虽然
  • bootstrap 3 到 bootstrap 4 列不再水平对齐[重复]

    这个问题在这里已经有答案了 我正在迁移到 bootstrap 4 但是我已将页面的 bootstrap min css 从 3 交换到 4 并且我的列现在全部垂直对齐 据我所知 列是正确的 我还使用 JS 小提琴进行测试 并且能够将它们全部
  • 对模板中的对象进行排序

    让这些模型 class Category models Model name models CharField max length 20 class Word models Model name models CharField max
  • R 使用 XML 数据时出现“externalptr”错误

    我正在 R 中处理一些 XML 数据 并遇到了有关 externalptr 类型的错误 1 当我尝试使用 xmlInternalTreeParse 函数 XML 包的一部分 时 出现以下错误 doc xmlInternalTreeParse
  • Magento:以编程方式添加新产品

    我正在尝试以编程方式将产品添加到 Magento 1 5 我的脚本最终将是一个 cron 作业 按照帐户系统提供的 XML 文件的指示定期更新和添加产品 我在创造新产品时遇到问题 我的脚本中的相关代码段是 attributeSetId 4
  • 将数组写入范围。只获取数组的第一个值

    我正在尝试将数组写入一个范围 并且尝试了多种方法 但无论如何 我总是一遍又一遍地只获得数组的第一个值 这是代码 Option Explicit Sub test ActiveWorkbook Worksheets Sheet1 Cells
  • 密集和稀疏矩阵的高效(时间和空间复杂度)数据结构

    我必须读取一个文件 其中存储了一个包含汽车的矩阵 1 蓝色汽车 2 红色汽车 0 空车 我需要编写一个算法来移动汽车矩阵的这种方式 蓝色的会动downward 红色的移动向右 有一个turn其中所有蓝色的都移动 然后轮流移动所有红色的 在读
  • Python:找到最小元素的最后一个索引?

    例如 1 2 3 4 1 2 具有最小元素 1 但它最后一次出现在索引 4 处 gt gt gt values 1 2 3 4 1 2 gt gt gt min x i for i x in enumerate values 1 4 无需修
  • 使用 OR 运算符检查变量值

    因此 我团队中的一位初级程序员今天编写了以下代码 if status incomplete unknown 这显然不会达到他的预期 即 if status incomplete status unknown 但我无法解释的是为什么第一段代码
  • 具有单一方法的类——最好的方法?

    假设我有一个旨在执行单个功能的类 执行完该功能后 就可以将其销毁 有什么理由选择其中一种方法吗 Initialize arguments in constructor MyClass myObject new MyClass arg1 ar
  • 在存档中安装 R 包

    如何在 Windows 中安装存档的软件包 http cran r project org src contrib Archive 当我尝试安装从存档下载的 tar gz 时 出现以下错误 Error in gzfile file r ca
  • Firestore 安全规则中的递归通配符未按预期工作

    我有一个像这样的数据结构 收藏 and 文件而不是JSON当然 但你明白了 users user1 name Alice groups groupA subbed true groupB subbed true user2 name Bob