如何在Firestore安全规则中处理FieldValue.delete()?

时间:2018-03-24 02:43:35

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

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

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

删除自己的用户字段的代码只是:

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

我可以删除该字段,但我无法弄清楚如何编写规则以允许Firestore Security中的此规则(而不是对该字段的其他更新)。

我尝试过以下规则:

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的问题。

1 个答案:

答案 0 :(得分:0)

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

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