首页 > 解决方案 > Firestore 安全规则中的更新字段数

问题描述

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

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


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

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

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

改编自这个答案


推荐阅读