我如何管理删除特定字段的规则
How could i manage rules to delete specific fields
我们有一个对象
trips/{uid} 字段 users 作为地图 {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();
}
我们试图检查值是否不是 null 但我们正在删除密钥,所以我们必须检查
!(request.auth.uid in request.resource.data.users)
我们有一个对象
trips/{uid} 字段 users 作为地图 {uid: info} 可能有很多用户。我们如何通过只允许删除与 request.auth.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();
}
我们试图检查值是否不是 null 但我们正在删除密钥,所以我们必须检查
!(request.auth.uid in request.resource.data.users)