Firestore 安全规则:更新已禁用,但更新完美

Posted

技术标签:

【中文标题】Firestore 安全规则:更新已禁用,但更新完美【英文标题】:Firestore security rules: update disabled but update perfectly 【发布时间】:2021-09-09 21:48:14 【问题描述】:

我的 firebase 项目与两个 Flutter 项目相关联。我想禁用更新使用

/Order/uniqueCode 
        allow read: if true;
        allow write: if true;
        allow update: if false;
        allow delete: if false;
    

但如果我运行此查询,两者都来自我的颤振应用程序

firestore!.collection('Order').doc(order!.orderId!).update(
                                            'payment': true,
                                            'paymentFrom': 1,
                                            'status': 2,
                                            'paymentDate': FieldValue.serverTimestamp()
                                          ).then((_) 
                                            print('update successfully');
                                          ).catchError((onError) 
                                            print(onError.toString());
                                          );

字段已正确更新

【问题讨论】:

怀疑拥有allow write基本上允许每个写操作。我建议删除allow write,而是分别指定每个粒度操作 - 所以更新/日期是错误的,但是allow create: if true; 我需要禁用更新操作@JonSkeet 是的,我知道。我是说我怀疑拥有allow write: if true; 会阻止你这样做。所以删除该行,并添加allow create: if true;。其余的保持不变。我不知道它会起作用(否则我会添加它作为答案),但我怀疑它会起作用。至少值得一试。 我可以确认这是真的 - 这属于安全规则中可用的细粒度条件,默认情况下,在条件定义之前所有值都是假的。 写入规则可以分为创建、更新和删除。您可以在documentation 中了解更多信息 【参考方案1】:

如果您尝试使用规则游乐场中的规则,那是 allow write: true 允许更新操作:

您可以阅读有关granular operations 的更多信息。创建、更新和删除都是“写”操作。

【讨论】:

以上是关于Firestore 安全规则:更新已禁用,但更新完美的主要内容,如果未能解决你的问题,请参考以下文章

Firestore 安全规则:更新时 request.resource.data.<prop> 会发生啥?

有没有办法使用Firestore安全规则使用FieldValue.increment()更新文档字段?

Firebase Firestore更新时间字段安全问题

如果不允许用户在firestore中更新文档,那么它也不允许使用merge进行设置?

Firebase Firestore 不更新电子邮件验证状态

即使firestore安全规则中的文档字段不可用,也如何允许访问?