我有一个文档,其中每个受邀用户都有一个字段(他们的 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 的问题。
最佳答案
此实例的一个解决方法是:
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);
关于google-cloud-firestore - 如何处理 Firestore 安全规则中的 FieldValue.delete()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49460697/