即使文档字段在Firestore安全规则中不可用,如何允许访问?

时间:2020-01-11 03:12:49

标签: firebase google-cloud-firestore firebase-security

因此,我在用户文档中添加了一个名为numberOfFollowers的新字段,因此,新用户将拥有此字段,而旧用户则没有此numberOfFollowers字段。

在安全规则中,我要设置numberOfFollowers应该是数字。并且如果旧用户没有此字段,则仍然允许更新其文档。

所以我这样设置安全规则

match /users/{userID} {

      allow update: if isValidUserStructure(request.resource.data)

    }

  function isValidUserStructure(user) {
        return (user.numberOfFollowers is number || user.numberOfFollowers == null)
             && user.banned is bool
             && user.contactNumber is string
             && user.createdAt is timestamp
             && user.domicile is string
             && user.email is string
  }

但是由于此行(user.numberOfFollowers is number || user.numberOfFollowers == null)

,对于没有该字段的旧用户,访问总是被拒绝

1 个答案:

答案 0 :(得分:0)

要检查某个文档中是否没有字段,您应该使用记录在案的in操作来检查密钥是否存在,该数据对象是Map类型的对象:

function isFieldPresent(data, fieldName) {
    return fieldName in data;
}

然后您可以选择在这种情况下要做什么。

由于null是Firestore中的有效字段值,因此像现在这样检查null绝对不同于检查不存在。