【问题标题】:list type safety in firestore security rules在 Firestore 安全规则中列出类型安全
【发布时间】:2019-10-06 13:40:22
【问题描述】:

在我的 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() 函数添加什么以确保好友列表仅包含字符串值吗?

【问题讨论】:

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


    【解决方案1】:

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

    Firebase 团队知道可能需要一些规则来执行此操作。如果您在 Firebase 支持下file a feature request,这将有助于升级问题。

    【讨论】:

    • 我刚刚注意到“数组”甚至不是受支持的类型标识符,所以我的代码无效。我应该改用什么?
    • 如果你想检查某个东西是否是一个数组,使用is list。您可能还想查看我关于安全规则类型的视频。 youtube.com/watch?v=qbd_4LT0Y4s
    • 谢谢,我编辑了原始问题并观看了视频。 :)
    猜你喜欢
    • 2018-10-19
    • 2019-07-05
    • 2020-06-19
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多