根据微信文档,权限自定义实例: 群聊 ,模拟使用
聊天室集合room:
{
_id: string,
owner: string, // 群主 openid
name: string, // 群名
members: string[], // 成员 openid 列表
}
权限定义:
{
"read": "auth.openid in get('database.chats.$(doc._id)').members || doc.creator == auth.openid",
"write": "doc._openid == auth.openid"
}
在小程序端, 在云数据库写记录成功如下:
_id: "chatRoomId",
_openid: "thisMyOpenid".
owner: "thisMyOpenid",
members: ['openidNo1','openidno2',"thisMyOpenid"],
name: "chatRoomName"
在小程序端 读
await db.collection('room').where({_openid: '{openid}',owner: '{openid}'}).get()
获得所有‘{openid}'创建的所有 rooms,这个没问题
然后我使用:
await db.collection('room').where({members: _.in(['{openid}'])}).get()
或者
await db.collection('room').where({members: _.in(['one_Openid_In_Members'])}).get()
或者
await db.collection('room').where({}).get()
或者
await db.collection('room').where({_id: _.neq("")}).get()
获得在 room’s members 里的人的所有rooms, 一直出错
Uncaught (in promise) Error Error: errCode: -502003 database permission denied | errMsg: Permission denied
我知道我的查询条件与权限设置 "auth.openid in get(`database.chats.${doc._id}`).members” 不相符
需要在查询中有 _id 参数,但对获得所有room id,显然不行,微信的文档实在是简约,我还没有测试聚合
不知道聚合与这些权限的设置的关系, 我担心可能又是困难重重。
stop eating请帮下忙!
不太理解
第二个划线):是我理解为什么我的查询语句被拒权限,是由于${doc._id}中的_id是要在查询中显示的提供,但此时不知room的_id, 我无法设置,我想是不是在权限设置中要增加一条规则,又不知如何设