Firestore 安全规则允许更新嵌套字段

Pav*_*vel 5 firebase firebase-security google-cloud-firestore

我有一个结构化的文档

name: "blablabla"
members:
    123: true
    456: true
Run Code Online (Sandbox Code Playgroud)

用户可以将自己添加到 members

docRef.update(FieldPath.of("members", myUid), true);
Run Code Online (Sandbox Code Playgroud)

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


我试过

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;
}
Run Code Online (Sandbox Code Playgroud)

但我得到 PERMISSION_DENIED: Missing or insufficient permissions.

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

Анд*_*лов 0

我使用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;
}
Run Code Online (Sandbox Code Playgroud)