我有一个文档,其中每个受邀用户都有一个字段(他们的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的问题。
答案 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);