首页 > 解决方案 > 在 Firestore 安全规则中列出类型安全

问题描述

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

我的“用户”文档有一个名为“朋友”的字段。它是一个字符串列表,代表其他用户文档的文档 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()函数中以确保朋友列表只包含字符串值吗?

标签: firebasegoogle-cloud-firestorefirebase-securitytype-safety

解决方案


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

Firebase 团队意识到可能需要一些规则来执行此操作。如果您向Firebase 支持提交功能请求,这将有助于升级问题。


推荐阅读