firebase - Firebase 查询和规则
问题描述
这似乎是一个非常简单的问题,我想我只是盯着它太久了。我正在尝试在我的数据库上查询交易历史,但我只希望用户能够阅读他们所涉及的交易文档。我知道查询约束必须匹配规则约束,而我的似乎是。有人能发现这里出了什么问题吗?
Firebase 规则
match /transaction-history/{transactionId}{
allow read: if isPurchaserOrReciever(getTransaction(transactionId));
}
function isPurchaserOrReciever(transaction) {
return transaction.purchaserId == request.auth.uid || transaction.recieverId == request.auth.uid;
}
function getTransaction(transactionId) {
return get(/databases/$(database)/documents/transaction-history/$(transactionId)).data;
}
我的应用程序中的数据库查询。
await firestore
.collection('transaction-history')
.where('purchaserId', isEqualTo: myId)
.getDocuments()).documents;
解决方案
我仍然不确定为什么我之前的查询不起作用。在进行更多研究时,我找到了一种简化查询的方法,并且不会引发任何错误。如果有人能告诉我我以前的规则或查询有什么问题,我仍然很感兴趣。
match /purchase-logs/{purchaseId}{
allow read: if resource.data.userId == request.auth.uid;
}
match /transaction-history/{transactionId}{
allow read: if resource.data.purchaserId == request.auth.uid || resource.data.recieverId == request.auth.uid;
}
推荐阅读
- java - 在 TCP 服务器中使用 vertx Vertciles 的有效方法
- mongodb - mongodb 在同一实例中更喜欢一个数据库而不是其他数据库
- html - 如何调整宽度自动使用CSS中包含标签的长度(大小)?
- sql - 从 openjson(@json) 结果创建表 Azure SQL
- php - 用 imagegd php 将图像颜色替换为透明
- php - PHP 在从 Netezza 数据库读取数据时用问号替换特殊字符,仅在 Linux 上
- typescript - 如何在 Angular 5 (Typescript) 中生成不同类型的二维码
- javascript - 带有 HTML 和 JavaScript 内容的复制和粘贴按钮
- javascript - 如何在反应中单击注销时重定向到登录页面
- javascript - 将 Firebase 元素映射为数组