Firestore安全规则中的更新字段数

时间:2019-01-23 11:55:24

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

我正在从客户端进行批处理操作,以仅更新一个字段,但是在进行批处理操作并在安全性规则中进行测试时,发现正在更新多个字段。我使用request.resource.data.size() >1request.resource.data.keys().size()>1并返回了true(正在更新文档)进行了检查,但这并不是要这样做,因为我想检查安全规则,即使用{ {1}},但是现在不起作用,以前我记得有request.resource.data.keys().hasOnly(['someFieldToUpdate'])可以检查,但是现在文档中没有它,this答案也提到了。那么,如何在批处理操作中现在检查实际上正在更新的字段?

2 个答案:

答案 0 :(得分:6)

您可以在数据地图上使用新的diff()方法。它告诉您更改了哪些键。这是一个示例:

function isUpdateToOpenField(attr) {
    return request.resource.data.diff(resource.data).changedKeys().hasOnly(['open']);
}

allow update: if isUpdateToOpenField(request.resource.data);

改编自this answer

答案 1 :(得分:2)

request.resource.data字段包含成功执行写操作后将存在的资源。由于无法始终可靠地填充writeFields属性。

现在,我唯一想到的选择是检查每个单独的字段是否已更改,然后仅在有一个更改的情况下才允许更改。但老实说,这听起来像是一个奇怪的用例。我看到了一个更常见的用例,它限制了用户可以更新的 个特定字段,而不是一次可以更新多少个

相关问题