【问题标题】:How could i manage rules to delete specific fields我如何管理规则以删除特定字段
【发布时间】:2017-12-14 14:21:17
【问题描述】:

我们有一个对象 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();
}

【问题讨论】:

  • 你可以试试allow write吗?
  • 我们试过了,但没用。
  • 我知道了,我们删除了键并尝试检查不存在的值,所以它不能为空。

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


【解决方案1】:

我们试图检查 value 是否不是 null 但我们正在删除键,所以我们必须检查

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-10
    • 2012-04-29
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2017-12-01
    相关资源
    最近更新 更多