我试图建立一个规则,让用户只有在购买了某项服务后才能对聊天信息进行操作。
我的数据库结构是这样的。
我的数据库结构是这样的: 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;
}
我得到的是标准的权限错误。我漏掉了什么?
当定义路径时,你的语法是错误的。试试这个。
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;
}