消防站安全规则中的列表类型安全

时间:2019-10-06 13:40:22

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

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

我的“用户”文档有一个名为“朋友”的字段。它是一个字符串列表,代表其他用户文档的documentID。 这些是我目前的规则:

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()函数中以确保friends-list仅包含字符串值吗?

1 个答案:

答案 0 :(得分:2)

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

Firebase团队意识到某些规则可能需要这样做。如果您file a feature request获得Firebase支持,这将有助于升级。