firebase - Firebase / Cloud Firestore / 规则设置(读取、写入、更新、删除)
问题描述
我在尝试配置 Cloud Firestore 规则时遇到了一些麻烦。
我正在尝试访问文档内、集合内的字段......就像这样
Future<void> fetchAndSetProducts([bool filterByUser = false]) async {
final filterString = filterByUser
? Firestore.instance.collection('products').getDocuments()
: Firestore.instance
.collection('products')
.where('creatorId', isEqualTo: userId)
.getDocuments();
try {
QuerySnapshot prodSnap = await filterString;
if (prodSnap == null) {
return;
}
'creatorId' 是 database/products/{productId} 中的一个字段
我想区分用户,只允许他们更新和删除他们在 database/products/... 中创建的文件,但我也希望他们能够查看 /products/... 中的所有文档
我为 fetchAndSetProducts 设置的布尔值是我希望用来过滤一些信息应用程序端的,例如只允许使用查看某些产品(包含其用户 ID 的产品)。我不确定我是否还需要在“产品”上设置索引,但我已经做了以防万一。
所以,我想锁定所有不是由用户创建的文件。
我认为它会是这样的:
service cloud.firestore {
match /databases/{database}/documents {
match /products/{productId}/documents{
allow read: if resource.data.creatorId == request.auth.uid;
}
}
}
buuut 不起作用,我用于按用户过滤的应用程序端代码也不起作用。
解决方案
如果你想匹配 products 集合中的所有文档,它看起来像这样:
service cloud.firestore {
match /databases/{database}/documents {
match /products/{productId} {
allow read: if resource.data.creatorId == request.auth.uid;
}
}
}
请注意,我从第二场比赛的末尾删除了“文档”。
推荐阅读
- javascript - p5.js中带有矩形的网格中的意外边框模式
- java - 如何将经过验证的用户输入传递给方法参数?
- mysql - mysql sub select很慢
- xamarin.android - xamarin.android 中资源目录的路径
- javascript - 在 React redux 对象的状态数组中,我无法更新它创建的状态错误在调度之间检测到状态突变
- azure - 如果未发送客户端,如何在 APIM 入站策略中获取/设置 Traceparent 标头?
- mysql - 错误代码:1815。内部错误:无法重置表中的 LSN:数据结构损坏
- java - 线程“主”org.openqa.selenium.WebDriverException 中的异常:等待驱动程序服务器启动超时
- reactjs - 如何在反应 direflow 应用程序中导入本地字体(woff)
- sql - 有没有办法缩短以下代码?