收藏
回答

云数据库 自定义权限设置 问题?

根据微信文档,权限自定义实例: 群聊 ,模拟使用

聊天室集合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请帮下忙!



回答关注问题邀请回答
收藏

1 个回答

  • stop eating
    stop eating
    06-11

    不太理解


    06-11
    有用
    回复 3
    • 彭刚
      彭刚
      06-11
      第一个划线)。就是在 members: ['opneid_no1','openid_no2',...] 中 ‘openid_no1' 在多个 room 的 members 里, 这样我要一次性查找出他参加的所有 room
      第二个划线):是我理解为什么我的查询语句被拒权限,是由于${doc._id}中的_id是要在查询中显示的提供,但此时不知room的_id, 我无法设置,我想是不是在权限设置中要增加一条规则,又不知如何设
      06-11
      回复
    • stop eating
      stop eating
      06-11回复彭刚
      我觉得你还不如别要自定义权限
      06-11
      回复
    • 彭刚
      彭刚
      06-11
      是的这个自定义权限很复杂,文档又不全,实际用云函数(全部在云端访问数据库)和不设权限(在小程序端访问)都很好,但前者有云函数的数量限制,后者对大部分场景是可以的,但像这个群聊的场景,就不能让群成员有群主一样的权限, 当然还是可以前者和后者的结合,这样程序文件结构乱
      06-11
      回复
登录 后发表内容
问题标签