Firestore规则和批量写入同一阵列

时间:2019-08-08 18:58:54

标签: google-cloud-firestore firebase-security

我试图多次批量写入同一阵列。

writeBatch.updateData(ref, {
    'testField':FieldValue.arrayUnion('firstReference')
  });
writeBatch.updateData(ref, {
    'testField':FieldValue.arrayUnion('secondReference')
  });
writeBatch.updateData(ref, {
    'testField':FieldValue.arrayUnion('thirdReference')
  });

但是似乎request.resource.data.testField.size()3resource.data.testField.size()0规则在该路径中仅调用一次,但我虽然firestore会调用每个write。因为我想使用exists来检测每个参考文献是否正确。有人对我有建议吗?

1 个答案:

答案 0 :(得分:1)

在处理事务或批量写入时,就强制执行安全规则而言,整个更改集都显示为单个更改,因为必须一次允许或拒绝所有单个文档上的整个更改。< / p>

如果您要求更新的批量是任意大小,则您尝试做的事情是不可能的,因为安全规则没有任何迭代,也没有任何方法可以对其中的每一项应用某些功能一个列表。如果可以假定列表的长度,则可以直接索引每个项目以对每个项目进行操作。

您的最后一招可能是将批处理写入不同的文档中,以便按照与那些文档匹配的规则对它们全部进行单独检查,然后使用Cloud Functions将这些更改复制到位。但是在这种情况下,这些更改不会自动应用。

如果您想在处理数据列表的安全规则中看到更大的灵活性,则应该file a feature request