有下面这个数据库安全规则:
以及这个集合字段结构:
然后,我按照这个文档,新建一个同样的 room 集合:
然后把安全规则改为和文档中一致:
规则如下:
{
"read": "auth.openid in get('database.room.${doc._id}').members",
"write": false
}
现在,已经确保文档中有一个members数组,并且当前用户的openid在这个数组中,然后使用下面的代码读取数据:
getApp().cloud.database().collection('room').where({
_id: '9c1e6a3167178ee4108f089b78b14371'
}).get()
此时抛出如下的权限不足错误:
就算把代码改成如下形式也依然有这个错误:
getApp().cloud.database().collection('room').doc('9c1e6a3167178ee4108f089b78b14371').get()
那么,要如何才能读取这个数据呢?
如果可以读取,好像文档并没有讲解如何读取?如果没有办法读取,那就表示微信文档有错误?
腾讯工作人员回复了,这个问题解决了,有两点要注意。
首先安全规则中要把字符'改为字符`,如: get(`database.room.${doc._id}`)。
其次,只能通过指定_id查询一条记录,并且传入的_id就是规则中的 ${doc._id},不支持查询多条记录。
弄不懂权限规则体系的话,就跳过,权限全开,然后回归到熟悉的数据库操作上,在sql脚本上控制,完事。