在 Firestore 安全规则中列出类型安全

list type safety in firestore security rules

在我的 Firestore 安全规则中,我想要一个规则来检查列表中的所有元素是否都是字符串类型。

我的 "user" 文档有一个名为 "friends" 的字段。它是一个字符串列表,表示其他用户文档的文档 ID。 这些是我当前的规则:

function userIsAuthenticated() {
  return request.auth != null;
}

match /users/{userID} {

  function resourceIsValidUser() {
    return displayNameIsValid();
  }

  function displayNameIsValid() {
    return request.resource.data.displayName is string &&
      request.resource.data.displayName.size() > 0 &&
      request.resource.data.displayName.size() < 17;
  }

  function photoUrlIsValid() {
    return request.resource.data.photoUrl is string;
  }

  function friendsIsValid() {
    return request.resource.data.friends is list;
  }

  function userIsUserOwner() {
    return request.auth.uid == userID;
  }

  allow read: if userIsAuthenticated();
  allow write: if
    userIsAuthenticated() &&
    resourceIsValidUser() &&
    userIsUserOwner();

}

有什么我可以添加到 friendsIsValid() 函数以确保好友列表只包含字符串值的吗?

目前没有检查数组所有元素类型的函数。由于也没有办法迭代一个数组,你现在唯一能做的就是预测数组的大小并单独检查每个元素,例如 array[0] is string && array[1] is string 等等。

Firebase 团队意识到某些规则可能需要执行此操作。如果您 file a feature request 有 Firebase 支持,这将有助于升级问题。