【问题标题】:Firestore security rules for unknown keys in map地图中未知键的 Firestore 安全规则
【发布时间】:2020-03-24 18:07:55
【问题描述】:

我正在尝试实施 Firestore 安全规则,以验证在地图内创建时所做的所有条目。但是,我的问题是我不知道地图的键。我有这样的事情:

{
    "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
  } 

}

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

    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 google-cloud-firestore firebase-security


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-11-27
      • 2018-03-22
      • 2018-10-19
      • 2019-07-05
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多