如何使用 firestore 的安全规则验证数组值?

2023-12-26

我有一个创建以下 JSON 结构的表单。

{  
   "reviewed":false,
   "title":"Just a title",
   "user":"UYV9TRKXfNW1NeCyFyfjZfagJ8B",
   "items":[  
      {  
         "age":"33",
         "experience":"Newcomer",
         "image":"https://image-url",
         "job":"Nerd",
         "name":"Testname",
         "party":"AAA",
         "type":"person"
      },
      {  
         "age":"33",
         "experience":"Newcomer",
         "image":"https://image-url",
         "job":"Informatiker",
         "name":"Testname",
         "party":"AAA",
         "type":"person"
      }
   ]
}

如何使用 firestore 的安全规则检查“items”的值?有没有办法循环/迭代数组?


为了完整起见:这是我到目前为止的解决方案。我按照链接答案中描述的方式做到了。可能的项目数量限制为 10,因此我们可以不用动态循环。

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

      function isAuthed() {
        return request.auth.uid != null
            && request.auth.uid == request.resource.data.user
            && request.auth.token.email_verified == true;
      }

      function isReviewed() {
        return request.resource.data.reviewed == false
            || request.resource.data.reviewed == "false"
      }

      function isValidTitle() {
        return isValidStringInput(request.resource.data.title, 200);
      }

      function items() {
        return request.resource.data.items;
      }

      function isValidPerson(item) {
        return items()[item].keys().hasAll(['image','type','name','job','age','party','experience'])
                && isValidStringInput(items()[item].image, 100)
                && isValidStringInput(items()[item].type, 10)
                && isValidStringInput(items()[item].name, 50)
                && isValidStringInput(items()[item].job, 50)
                && isValidStringInput(items()[item].party, 50)
                && isValidStringInput(items()[item].experience, 50)
                && isValidNumber(items()[item].age);
      }

      function isValidParty(item) {
        return items()[item].keys().hasAll(['image','type','name','orientation','experience','promi'])
                && isValidStringInput(items()[item].image, 100)
                && isValidStringInput(items()[item].type, 10)
                && isValidStringInput(items()[item].name, 50)
                && isValidStringInput(items()[item].orientation, 50)
                && isValidStringInput(items()[item].experience, 50)
                && isValidStringInput(items()[item].promi, 50);
      }

      function isValidItem(item) {
        return isValidPerson(item)
            || isValidParty(item);
      }

      function isValidStringInput(input, maxSize) {
        return input is string
            && input.size() > 0
            && input.size() <= maxSize;
      }

      function isValidNumber(input) {
        return input is int
            || input.matches('^[0-9]+$');
      }

        // One can READ
            // always ...
        allow read: if true;

      // One can WRITE, when ...
        // writer is logged in
        // uid in event is same as uid of writer
        // writer has email confirmed
        // reviewed is initial set to false
        // form/user input is ok
      allow write, update:
        if isAuthed()
        && isReviewed()
        && isValidTitle()
        && items().size() >= 1
        && items().size() <= 10
        && isValidItem(0)
        && (items().size() < 2 || isValidItem(1))
        && (items().size() < 3 || isValidItem(2))
        && (items().size() < 4 || isValidItem(3))
        && (items().size() < 5 || isValidItem(4))
        && (items().size() < 6 || isValidItem(5))
        && (items().size() < 7 || isValidItem(6))
        && (items().size() < 8 || isValidItem(7))
        && (items().size() < 9 || isValidItem(8))
        && (items().size() < 10 || isValidItem(9));
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 firestore 的安全规则验证数组值? 的相关文章

  • FIREBASE 数据库 - 存储子节点的唯一密钥(Swift/IOS)

    我正在尝试存储生成的独特的钥匙当 childByAutoId 被调用时 理论上 它将有助于映射稍后需要在我的应用程序中发生的指定子项的更新或更改 我对 Firebase 的分层数据库相当陌生 如果下面描述的方法不正确 请随时提供替代方案 我
  • 使用 Firebase C++ sdk 时出现“架构 arm64 的未定义符号”

    我于 2016 年 6 月 10 日下载了 firebase c sdk 我将 sdk 添加到我的 iOS 项目中 将 objc 设置到其他链接器标志中 我遇到了链接器错误 请指教 错误日志如下 Undefined symbols for
  • Flutter Firestore 查询嵌套子集合

    我正在尝试查询 Firebase 中的子集合 但我总是得到一个空列表 这是我的查询 Firestore instance collection messages where idFrom isEqualTo userID snapshots
  • 在 Cloud Functions for Firebase 中调用 sendPasswordResetEmail()

    我知道 Firebase 的 Cloud Functions 仍然很新 但我正在尝试将一些客户端代码移至云中 并且 注册 过程似乎是一个明显的目标 目前 注册页面要求提供电子邮件地址 生成随机密码并调用createUserWithEmail
  • Firebase blaze 计划是否有 Spark 计划配额?

    Firebase Blaze 计划是否有 Spark 计划免费配额 我想将 Firebase 与 google 云平台一起使用 但仍希望有免费托管限制 我不关心其他服务 因为我不使用它们 更新 2018 03 13 Blaze 计划中的项目
  • Metro 遇到错误:尝试解析模块“firebase”时

    启动模拟器后出现此错误 我在图像下添加代码并在终端上出错 这是我的 App js 文件模拟器上的错误图像 https i stack imgur com pffip png 错误 错误 尝试解析模块时firebase从文件 Users ca
  • Firebase 数据库 onWrite 的 Cloud Functions 触发两次

    您好 我正在开发一个通知系统 但我在删除已处理的通知数据时遇到问题 这onWrite事件侦听器被触发两次 从而产生两个通知 您能帮我找到解决方法 以便 onWrite 事件侦听器不应该被触发两次吗 删除已处理的数据很重要 exports s
  • FirebaseAuth.getInstance().signOut() 不注销

    我尝试从 firebase 注销用户 但在关闭应用程序并再次打开后 用户仍然处于连接状态 我尝试从 firebase 定期注销用户 但没有解决问题 我想知道是什么导致了这个问题 logout setOnClickListener new V
  • 调试firebase云函数

    如何使用 Visual Studio 代码进行调试firebase 数据库 trigger功能 我尝试了模拟器 但是当我调用它时出现错误 functions debug myMethod C functions functions gt f
  • 如何在reactfire上启用持久性?

    我想使用以下方法在我的 PWA React 应用程序上实现 Firestore 离线持久性反应火 https github com FirebaseExtended reactfire图书馆 const firestore useFires
  • 无法将项目部署到 firebase

    我尝试将我的应用程序部署到 firebase 但失败了 firebase 部署 project af2test 您的 CLI 身份验证需要更新才能利用 新功能 请运行 firebase login reauth 错误 无法授权访问项目 af
  • Firebase 托管:部署时缓存清除脚本

    我有一个托管在 firebase 上的聚合物 单页应用程序 应用程序 当我将新版本部署到 firebase 时 我希望 firebase 重新加载 javascript 源而不是使用缓存的源 是否可以通过 firebase json 做到这
  • MappedListIterable 不是子类型

    我是 flutter 和 dart 的新手 并尝试从 firestore 作为流获取数据并将其提供给我的 ListView 但我不断收到此错误 type MappedListIterable
  • 如何将 Cloud Firestore 数据库集合下载到 JSON 或 CSV 文件中?

    好的 事情是这样的 我已经在 Flutter Firebase 项目上工作了一段时间 现在我的客户想知道是否有机会从 Cloud Firestore 数据库的某个集合中获取 CSV o JSON 文件 以便稍后使用由Power Bi或其他一
  • Firebase 远程配置 - 初始获取返回本地默认值

    我正在使用 Firebase 远程配置来获取远程数据 并且我的应用程序需要首次启动时的最新数据 我正在我的应用程序中进行获取和更新onCreate mFirebaseRemoteConfig fetch cacheExpiration ad
  • Firebase无法组合调用 equalTo() 和 startAt() [重复]

    这个问题在这里已经有答案了 我有一个 Firebase 数据库 我正在尝试查询 但是我在运行时收到错误消息 java lang IllegalArgumentException Can t call equalTo and startAt
  • 带有 Firebase 通知的 Flutter Web - subscribeToTopic

    我想在我的 flutter web 应用程序中接收 firebase 通知 我知道 firebase messaging 包不可用于网络 但我已经管理配置我的应用程序以获取令牌 在网络应用程序位于后台时接收并显示消息 并在应用程序位于前台时
  • Cloud Functions for Firebase - 通过 Nodejs/Cloud Function 将多个 PDF 合并为一个

    我遇到了一个问题 我试图通过云功能合并一堆 PDF 然后将合并的 PDF 下载到用户的计算机上 我的提供程序中有一个函数 它调用云函数并传递指向 pdf 的 URL 数组 如下所示 mergePDFs pdfs Create array o
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb

随机推荐

  • Windows 命令行 (cmd.exe) 命令的最大长度是多少?

    有很多人问问题 https stackoverflow com questions 1277565 cmd exe command line string limits关于如何解决 cmd exe 命令最大长度的问题 我想知道 Window
  • div 中的画布与显示无不起作用

    我遇到了画布元素的问题 当它位于隐藏的 div 中并且 div 被切换时 它不会显示 更好的解释和例子在这里 http jsfiddle net 78sJT 10 http jsfiddle net 78sJT 10 这发生在 ff 和 c
  • 使用 XMLELEMENT Oracle 时如何替换 ' 或任何特殊字符

    我有以下查询 如何保留撇号 完好无损并且没有将其替换为 apos我也想处理其他角色 SELECT RTRIM XMLAGG XMLELEMENT E I m EXTRACT text FROM dual Output I apos m Th
  • 从 PHP 中的 CIDR 表示法获取列表 IP

    有没有办法 或函数 类 从 CIDR 表示法获取 IP 地址列表 例如 我有 73 35 143 32 27 CIDR 并且想要获取此表示法中的所有 IP 的列表 有什么建议么 谢谢 我将编辑前述 https stackoverflow c
  • 在触摸 MapView 之前视图不会更新

    我有一个主要由一个大地图视图组成的活动 在该 MapView 之上 我还有一些其他视图正在尝试以编程方式与之交互 当我尝试使用 AnimationListener 对 MapView 顶部的其中一个视图进行动画处理时 出现了第一个问题 在我
  • 远程发起人停止被调用

    我有一个应用程序 它在单个进程中创建多个应用程序域 并通过远程处理在它们之间进行通信 我为所有对象创建赞助商以防止它们被垃圾回收 但是 无论如何 有些人最终还是获得了GCed 经过一番调查后 我确定取决于InitialLeaseTime在我
  • 使用 Moment 的guess() 返回时区名称

    我想用时刻的guess 函数 https momentjs com timezone docs using timezones guessing user timezone 返回时区大陆 或国家 和城市 如示例所示 moment tz gu
  • Spring JPA 中跨两个不同数据库表的查询

    我有三张桌子 表1在DB1中 表2和表3都在DB2中 如下所述 DB1中的表1 customerId accountNumber DB2 中的表 2 customerId accountNumber id DB2 中的表 3 id 名称 国
  • 区分音乐文件中的乐器[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定一个音乐文件 是否可以分离出正在演奏的每种乐器 IE 假设我有一些Song mp3 那首歌中有人声 吉他 贝斯和鼓 我想要 4 个
  • 确定 Javascript 对象是“复杂”对象还是只是一个字符串

    我希望能够传递字符串文字 this is a string 或 JavaScript 对象 one this two is three a four string 作为函数的参数 并根据它是字符串还是对象采取不同的操作 我如何确定哪个是真的
  • LINQ to SQL 使用不同的行对多个列进行分组

    我有以下表结构 我想选择不同的CustomerId and CustomerName TotalCost 这是表结构和列数据类型 LogId int CustomerId string CustomerName string Cost in
  • SVG 线端点独立动画

    我正在尝试对 SVG 线端点之一进行动画处理 使其沿着特定路径移动 而另一个端点保持静止 因此线会拉伸和收缩 同时保持笔直 到目前为止 我所实现的目标是使我的整条线沿着路径移动 并将端点之一绑定到它
  • Android 问答游戏 - 每个问题的倒计时器

    我使用此处的教程创建了一个适用于 Android 的测验应用程序 http automateddeveloper blogspot co uk 2011 06 getting started complete android app htm
  • 如何停止 html 属性中 onclick 事件的事件传播?

    我有一个带有 onclick 属性的 html 元素 我需要防止该事件冒泡 我尝试这样做 div 和这个 div 但两者都不起作用 我绝对需要在 html onclick 属性中执行此操作 因为此 div 是 Razor 部分视图的一部分
  • 如何在 Mac 10.7 上的 virtualenv 中安装 MatPlotLib

    这是我尝试做的 SAASSenv miki725mac SAASSenv miki725 python Python 2 7 2 v2 7 2 8527427914a2 Jun 11 2011 15 22 34 GCC 4 2 1 Appl
  • c 编程难题

    给定一个所有元素均为正数的数组 求子序列的最大和 约束条件是序列中的 2 个数字不应在数组中相邻 因此 3 2 7 10 应返回 13 3 和 10 之和 或 3 2 5 10 7 应返回 15 3 5 和 7 之和 我尝试使用所有可能允许
  • NPM 搜索:内存不足

    在 ubuntu 14 10 3 13 0 76 generic 120 Ubuntu SMP Mon Jan 18 15 59 10 UTC 2016 x86 64 x86 64 x86 64 GNU Linux 上 当我这样做时 sud
  • 实现 AsyncTask 的技巧

    大家好 我有一个应用程序 可以在位图上放置一个圆圈 并使用滑动条更改圆圈内像素的 RGB 值 我想使用 asynctask 来加速更改像素的过程 我不知道从哪里开始 我在活动文件底部注释掉了一些代码 因为这是我第一次尝试 谁能指出我如何实现
  • 使用 OpenCV 进行头部(和肩部)检测

    如果我问了一个太新手的问题 请提前道歉 我是 OpenCV 的初学者 我已经完成了一些教程 但我还没有很好地掌握它的概念 问题 如何使用 OpenCV 进行头部检测 不是面部检测 例如在公共汽车或房间内的照片中 注意 我不想做人脸检测 只需
  • 如何使用 firestore 的安全规则验证数组值?

    我有一个创建以下 JSON 结构的表单 reviewed false title Just a title user UYV9TRKXfNW1NeCyFyfjZfagJ8B items age 33 experience Newcomer