firebase - map 中未知键的 Firestore 安全规则

标签 firebase google-cloud-firestore firebase-security

我正在尝试实现一个 Firestore 安全规则,以验证在 map 中创建时所做的所有条目。但是,我的问题是我不知道 map 的键。我有这样的东西:

{
    "name": "Tom",
    "answers": {
        "SomeUUID": {
            "answer": "Alps",
            "right": true
        },
        "AnotherUUID": {
            "answer": "Mount Everest",
            "right": false
        }
    }
}

要使用安全规则验证条目,我会做这样的事情

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

  match /answers/{answerID} {  
        allow read;
        allow create: request.resource.data.name is string && request.resource.data.answers is map
  } 

}

如何在不知道映射大小或键的情况下进一步验证成员映射的内容?是否有可用于 key 的通配符?每个创建的键的值应该相同。我想做这样的事情:

    allow create: request.resource.data.name is string && request.resource.data.answers && 
request.resource.data.member.$(wildcard).keys().size() == 2 && request.resource.data.member.$(wildcard).answer is string && request.resource.data.member.$(wildcard).right is bool

这是可能的还是我需要改变整个逻辑?是否有可能使用通配符?

最佳答案

如果您不知道某个字段的名称,则无法检查该字段的内容。安全规则中没有通配符或迭代器,可让您随机发现事物。

如果您必须保留此文档结构和验证逻辑,请考虑将文档数据发送到您控制的后端,并使用服务器端逻辑来确定数据是否有效。

关于firebase - map 中未知键的 Firestore 安全规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60836867/

相关文章:

android - 更新 Firebase Recyclerview 适配器不会删除以前的列表

firebase - PlatformException(error, Given String is empty or null, null) 错误 flutter

android - Firebase 规则解析错误

android - Firebase 聊天应用程序 setValue 公共(public)数据库失败错误?

google-cloud-firestore - 如何使用 CLI 为 Firestore 部署安全规则?错误 : Cannot understand what targets to deploy

firebase - 弹出重定向上的 polymerfire-auth 错误 "auth/popup-closed-by-user"404

swift - 如何限制按时间快速点击的按钮

javascript - 进度条不起作用 文件正在上传 firebase

ios - 插入 Firestore 数据时图像重复

javascript - 如何使用 Firebase Web 按创建时间顺序显示数据