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()更新文档字段?
如果不允许用户在firestore中更新文档,那么它也不允许使用merge进行设置?