首页 > 解决方案 > 允许更新嵌套字段的 Firestore 安全规则

问题描述

我有一个结构文件

name: "blablabla"
members:
    123: true
    456: true

用户可以自行添加members

docRef.update(FieldPath.of("members", myUid), true);

如何编写安全规则来允许这样做?


我试过了

allow update: if is_valid(request.resource.data);
function is_valid(data) {
  return data.keys() == ['members']
      && data.members.keys() == [request.auth.uid]
      && data.members[request.auth.uid] == true;
}

但我明白了PERMISSION_DENIED: Missing or insufficient permissions.

(但是在安全规则模拟器中允许访问)

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


我想出了一个使用removedKeys的条件。从理论上讲,这应该可以正常工作。

allow update: if is_valid(request.resource.data);
function is_valid(data) {
  return data.keys() == ['members']
      && data.members.keys() == [request.auth.uid]
      && afterData().members.diff(resource.data.members).removedKeys().size() == 0;
}  
function afterData() {
  return getAfter(/databases/$(database)/documents).data;
}

推荐阅读