【问题标题】:How do I handle FieldValue.delete() in Firestore security rules?如何处理 Firestore 安全规则中的 FieldValue.delete()?
【发布时间】:2018-03-24 02:43:35
【问题描述】:

我有一个文档,其中每个受邀用户都有一个字段(他们的 request.auth.uid),其中有一个数字值代表他们的访问级别。

我希望用户能够从文档中删除他们的用户字段,但不能提高他们的字段级别。

删除自己的用户字段的代码很简单:

documentReference.update(myUserId, FieldValue.delete());

我可以很好地删除该字段,但我不知道如何编写规则以允许在 Firestore 安全中进行此操作(而不是对该字段的其他更新)。

 

我试过这样的规则:

allow update: if (request.resource.data[request.auth.uid] < resource.data[request.auth.uid]);

allow update: if !(request.resource.data[request.auth.uid] > 0);

但它们会导致错误(我猜是因为该字段不再存在)。

 

注意事项:当我将用户字段值从原始值更新为较低(非删除)值时,上述规则仍然有效,并且

allow update: if request.auth.uid in request.writeFields;

在使用 FieldValue.delete() 时仍然返回 true,所以这不是用户 ID 的问题。

【问题讨论】:

    标签: google-cloud-firestore firebase-security


    【解决方案1】:

    此实例的一种解决方法是:

    allow update: if (request.resource.data.size() == resource.data.size() - 1) 
    && request.writeFields.size() == 1
    && request.auth.uid in request.writeFields
    && !(request.auth.uid in request.resource.data);
    

    基于此处的评论:Firestore Security - allow only known fields

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 2018-10-19
      • 2019-07-05
      • 2021-04-21
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多