我如何管理删除特定字段的规则

时间:2017-12-14 14:21:18

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

我们有一个对象 使用字段用户 行程/ {uid} 作为地图{uid:info},其中可能有许多用户。我们如何管理安全规则,只允许删除与request.auth.uid

相同的uid

我们是如何尝试这样做的:

match /trips/{trip} {
  allow update: if request.auth.uid != null &&
                   request.resource.data.users[request.auth.uid] == null;
}

但是从具有更新的对象中删除字段不会那样。

Map<String, Object> removeUser = new HashMap<>();
removeUser.put("users." + user.getUid(), FieldValue.delete())
FirebaseFirestore.getInstance().collection(collection).document(document).update(removeUser)

以前的代码做了不同的事情。

增加:

令人惊讶的是,下一条规则运作良好,但不符合我们的要求:

match /trips/{trip} {
  allow update: if request.auth.uid != null &&
                   request.resource.data.users[(request.auth.uid)] !=  null &&
                   request.resource.data.users.size() + 1 == resource.data.users.size();
}

1 个答案:

答案 0 :(得分:0)

我们尝试检查值是否 null ,但我们正在删除密钥,因此我们必须检查

!(request.auth.uid in request.resource.data.users)