基于路径组件和其他集合的Firestore规则。

问题描述 投票:0回答:1

我试图建立一个规则,让用户只有在购买了某项服务后才能对聊天信息进行操作。

我的数据库结构是这样的。

我的数据库结构是这样的: purchases/{purchaseId} 其中包含 buyer_id 我也有消息收集。/channels/{purchaseId}/thread/{threadId}.

我想允许CRUD操作,如果用户在 thread 同为 buyer_id 购货收款 purchaseId 文档。

这是我试过的,暂时使用当前用户的ID(auth)。理想的情况是,我可以用以下方法代替 request.auth.uid 与我试图访问的文档中的字段相匹配,但现在这样就可以了。

match /channels/{purchaseId}/thread/{threadId} {
    allow read, create, update, delete: if get(/databases/{database}/documents/purchases/{purchaseId}).data.buyer_id == request.auth.uid;
}

我得到的是标准的权限错误。我漏掉了什么?

firebase google-cloud-firestore firebase-security
1个回答
1
投票

当定义路径时,你的语法是错误的。试试这个。

match /channels/{purchaseId}/thread/{threadId} {
    allow read, write: if get(/databases/$(database)/documents/purchases/$(purchaseId)).data.buyer_id == request.auth.uid;
}

替换成 request.auth.uid 与文档中的字段。

match /channels/{purchaseId}/thread/{threadId} {
    allow read, write: if get(/databases/$(database)/documents/purchases/$(purchaseId)).data.buyer_id == resource.data.buyer_id;
}
© www.soinside.com 2019 - 2024. All rights reserved.