google-cloud-firestore - 如何处理 Firestore 安全规则中的 FieldValue.delete()?

标签 google-cloud-firestore firebase-security

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

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

关于google-cloud-firestore - 如何处理 Firestore 安全规则中的 FieldValue.delete()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49460697/

相关文章:

firebase - 您如何调试 Firestore 安全规则?

google-cloud-firestore - Firestore规则: Only strings in List

flutter - '无效的文档引用。文档引用在 flutter 中必须有偶数个段

reactjs - React with Firebase - 提交 Formik 表单数据

firebase - 如何从文档中查询特定数据字段

javascript - 如何在 Firestore Web 版本 9(模块化)的集合中获取子集合?

flutter - 有没有办法对多个子集合流进行分组和映射?

javascript - $uid 节点如何在 firebase-realtime-database 规则上工作?

android - 在 Cloud Firestore 中如何创建一个只创建一次的安全规则

firebase-security - 用于更新文档中特定字段的 firestore 安全性