Firestore安全规则限制字段输入

时间:2020-07-24 16:04:14

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

在我的Firestore文档中,我试图将用户可以更新的字段限制为仅允许的字段。我想到了一个可以检查request.resource.keys()是否包含我不允许的键的函数,如果允许,我将阻止update,如果不允许,则允许update。到目前为止,我的功能如下:

function field_limit() {
      let allow_keys = ["field1", "field2", "field3"];
      return request.resource.keys() in allow_keys;
    }

在路径匹配中:

allow update: if field_limit();

当我在模拟器中运行修改“ field1”的单元测试时,它没有通过。我认为我在这里做错了,因为我正在将整个keys列表与allow_keys列表进行比较。 那我该怎么做才能获得所需的功能?

我想到了一个通过request.resource.keys()进行迭代的解决方案,并查看每个键是否为in allow_keys。如果不是,则阻止update。但是如何遍历列表的每个值?

编辑 。应该是request.resource.data.keys()而不是request.resource.keys()。否则,它将无法正常工作。

1 个答案:

答案 0 :(得分:3)

in运算符无法按您期望的方式工作。为此,请参见documentation-它仅检查列表中是否有单个值。

如果要检查值列表是否仅包含另一个列表中值的子集,则应改用hasOnly

request.resource.keys().hasOnly(allow_keys)

如果列表request.resource.keys()仅包含allow_keys列表中的值,则它将为true。