firestore规则路径的大小

2024-02-09

我试图在 firestore 规则中使用路径的大小,但无法让任何东西发挥作用,并且在 firestore 文档中找不到有关如何执行此操作的任何参考。

我想使用最后一个集合名称作为规则中的参数,所以尝试了以下方法:

match test/{document=**}
   allow read, write: if document[document.size() - 2] == 'subpath';

但 .size() 似乎不起作用,.length 也不起作用


这是可以完成的,但您首先必须将路径强制为字符串。

要获取当前资源的路径,可以使用__name__财产。

https://firebase.google.com/docs/reference/rules/rules.firestore.Resource#name https://firebase.google.com/docs/reference/rules/rules.firestore.Resource#__name__

以供参考,resource是一个通用属性,可用于表示正在读取或写入的 Firestore 文档的每个请求。

https://firebase.google.com/docs/reference/rules/rules.firestore.Resource https://firebase.google.com/docs/reference/rules/rules.firestore.Resource

resource['__name__']

返回的值__name__是一个Path,缺少有用的方法,所以在使用之前size您需要将路径强制为字符串。

https://firebase.google.com/docs/reference/rules/rules.String.html https://firebase.google.com/docs/reference/rules/rules.String.html

string(resource['__name__'])

转换为字符串后,您可以split上的字符串/运算符并将其转换为List字符串路径部分。

https://firebase.google.com/docs/reference/rules/rules.String.html#split https://firebase.google.com/docs/reference/rules/rules.String.html#split

string(resource['__name__']).split('/')

现在您可以使用 List 检索列表的大小size method.

https://firebase.google.com/docs/reference/rules/rules.List#size https://firebase.google.com/docs/reference/rules/rules.List#size

string(resource['__name__']).split('/').size()

Firestore 规则的挑战性之一是不支持变量,因此当您需要多次使用结果时,您经常会重复代码。例如,在这种情况下,我们需要使用分割的结果两次,但不能将其存储到变量中。

string(resource['__name__']).split('/')[string(resource['__name__']).split('/').size() - 2]

您可以通过使用函数并将参数用作变量来稍微干燥一下。

function getSecondToLastPathPart(pathParts) {
  return pathParts[pathParts.size() - 2];
}

getSecondToLastPathPart(string(resource['__name__']).split('/'))

将它们结合在一起作为您的解决方案,它看起来像这样......

function getSecondToLastPathPart(pathParts) {
  return pathParts[pathParts.size() - 2];
}

match test/{document=**} {
   allow read, write: if getSecondToLastPathPart(string(resource['__name__']).split('/')) == 'subpath';
}

希望这可以帮助!

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

firestore规则路径的大小 的相关文章

随机推荐

  • 在线程中“浪费时间”最高效的 CPU 方式是什么?

    我有许多线程 100 个 每个线程一次执行几秒钟 当它们执行时 它们花费大量时间等待另一个系统 串行设备 的响应 我注意到 同时执行 100 个线程可能会占用大量资源 因此我实际上限制了可以同时启动的线程数量 但我想到 在线程内等待外部事件
  • 将功能附加到 Rails 3 中的按钮

    我的网页上显示一组按钮 单击其中一个按钮的效果需要是调用外部 API 可能会收到响应 并更新页面上的某些内容 一些附加信息 这些按钮部分地放置在页面上 并构成用户列表的一部分 这些按钮用于激活和停用列出的用户 我不确定这个设置是否会影响做我
  • when/2 和 ground/1 的逻辑纯度

    问题 我有一个关于逻辑纯度的问题 这个程序纯粹吗 when ground X X gt 2 有关上下文的一些 ir 相关细节 我正在尝试编写具有良好终止属性的纯谓词 例如 我想写一个谓词list length 2描述列表与其长度之间的关系
  • Angular 1.5 组件绑定:检查回调是否存在

    我有一个简单的contactList组件 有 2 个绑定 contacts and onRemove contacts只是要显示的联系人数组 onRemove是一个回调函数 app component contactList templat
  • python:如何在需要时启动和停止记录器

    我正在尝试在 Django 应用程序的代码中记录 sql 语句 目前我在 settings py 中使用以下记录器配置 LOGGING version 1 disable existing loggers False formatters
  • ASP.NET 工作线程可以同时处理多个请求吗?

    我知道 ASP NET 将在池中的单个线程上执行请求 反之亦然吗 单个 ASP NET 请求是否会独占一个工作线程直到请求完成 或者 ASP NET 是否会在多个并发请求之间重复使用同一线程 即使你的第一个陈述也不完全正确 ASP NET可
  • 在列表中搜索元素并将其替换为多个项目

    搜索给定列表的Python方式是什么 a b c 对于元素b替换它并插入多个项目b1 b2 b3这样列表最终读作 a b1 b2 b3 c 使用切片表示法 gt gt gt lst a b c gt gt gt i lst index b
  • 在绘图旁边显示(离散)颜色条作为(自动选择的)线条颜色的图例

    我试图制作一个显示许多线条的图 但很难区分它们 它们有不同的颜色 但我想让它很容易显示哪条线是哪条线 普通的图例并不能很好地工作 因为我有超过 10 行 这些行遵循逻辑顺序 我想 1 从颜色图中自动选择它们的颜色 最好是具有平滑排序的颜色
  • 排除“Else”子句是否会带来性能差异?

    下面两段代码在性能上有区别吗 if myCondition return returnVal1 return returnVal2 and if myCondition return returnVal1 else return retur
  • Ruby 单元测试技术、Mocking 和 Stubbing

    我被招募为软件开发人员 我正在尝试使用 ruby 中的 RSPEC 和 RR 进行单元测试 但很难决定具体的策略 主要是因为我被分配为已经发布的代码编写单元测试 书面 考虑以下代码 它是名为 method1 的大方法的一部分 if 5234
  • 在 C# 中读取扩展图像属性

    如果可能的话 出于性能原因 我想在不打开图像的情况下找到磁盘上图像的高度 宽度 Windows 图像属性窗格包含宽度 高度 位深度等信息 这让我相信它在文件的某个位置存储元数据 我如何访问这些信息 stackoverflow上有一些关于如何
  • Google Play 显示 - 您的设备与此版本不兼容,无法下载该应用程序

    我们已经在 Play 商店上传了一个问候应用程序 它在手机上运行良好 但在平板电脑中 我收到错误 此设备与此版本不兼容 这是我的 Android 清单权限 请检查一下 如果有人纠正错误请告诉我
  • Linux内核FIELD_SIZEOF宏解释

    我正在学习 c99 在阅读了结构之后 我在Linux内核代码 http lxr free electrons com source include linux kernel h a avr32 L53 define FIELD SIZEOF
  • 如何从 PHImageManager 获取方形缩略图?

    有人知道如何从 PHImageManager 获取方形拇指吗 PHImageContentModeAspectFill 选项无效 PHImageManager defaultManager requestImageForAsset PHAs
  • 如何从多维数组(没有循环)中获取单一类型的数组[重复]

    这个问题在这里已经有答案了 我有以下数组 foo array 10 0 gt array 4 merchantId gt string 5 12e21 programId gt string 27 ddd3333 networkId gt
  • 如何将 Composer 供应商文件夹提交到 Git 存储库?

    我可以设置吗 gitignore以这种方式允许 Composer 依赖项 供应商目录 存在于我的存储库中 作曲家正式建议您 不应该 这样做 它提供了三个原因 https getcomposer org doc faqs should i c
  • 显示当天的项目

    我希望创建一个函数 从 mySQL 表中获取随机项目 但让我将返回的项目保留为 当天的项目 换句话说 昨天是 当天的项目 的项目不应再次显示 直到所有其他项目都显示为当天的项目 关于如何以优雅的方式做到这一点有什么建议吗 Thanks 添加
  • 查询 INFORMATION_SCHEMA 时出现死锁

    我有一个进程可以根据已发布的元数据层的更改动态更改 SQL2K5 表结构 例如 如果需要添加新列并且表没有依赖项 步骤将是 1 使用 T SQL 为表中已存在的任何索引和主键创建脚本 这些脚本包含在下面 2 删除表 3 从具有新列的元层重新
  • 在 Swift 3 中将可选字符串转换为双精度

    我有一个选项字符串 想将其转换为双精度 这在 Swift 2 中有效 但自从转换为 Swift 3 后 我得到的值为 0 var dLati 0 0 dLati latitude as NSString doubleValue 我进行了检查
  • firestore规则路径的大小

    我试图在 firestore 规则中使用路径的大小 但无法让任何东西发挥作用 并且在 firestore 文档中找不到有关如何执行此操作的任何参考 我想使用最后一个集合名称作为规则中的参数 所以尝试了以下方法 match test docu