收藏
回答

请问云数据库安全规则为 auth.openid in doc.users 时,如何读取数据?

在使用微信云开发云数据库时,如果安全规则为:

{ "read": "auth.openid in doc.users" } ,此时如何读取数据?

(这里忽略write权限,暂时只考虑read权限。)

无论我使用:

    const _ = db.command
    const res = await db.collection('xxx')
      .where({
        users: _.all(['{openid}']),
      })
      .get()


或者使用:

    const _ = db.command
    const res = await db.collection('xxx')
      .where({
        users: _.elemMatch(_.eq('{openid}'))
      })
      .get()


都会抛出 Error: errCode: -502003 database permission denied | errMsg: Permission denied 权限不足的错误。

我的目的是,只要是用户的 _openid 在文档的 users 这个字段中,就有读取权限。

但是目前无论怎么写查询语句,都会抛出这个权限不足的错误,请问如何处理?

======= 补充 =======

我把这个问题重新整理后,提了一个新的关联问题: https://developers.weixin.qq.com/community/develop/doc/000a2c023f08b83f0652b6a5e6ac00?fromCreate=0


最后一次编辑于  10-22
回答关注问题邀请回答
收藏

3 个回答

  • 10-22

    目前已经根据官方文档改成这个形式了(如上图所示,把这个规则用于room集合),但是读取时依然出现权限不足的错误,错误大概如下:

    Error: errCode: -502003 database permission denied | errMsg: SecurityRuleError: 错误的值 (Cannot read properties of undefined (reading 'members'))

    (数据集合中只有一个文档,我确保当前用户的openid是在这个文档的members数组中。)

    那么,是不是在where中需要添加某个查询条件呢? 这个查询条件是什么呢?

    10-22
    有用
    回复
  • 任小嶠
    任小嶠
    10-22

    { "read": "auth.openid in doc.users" } 语法有问题

    安全规则这块语法, in 语法只支持常量,不支持动态的 doc.users 这种动态指定库字段的  

    动态指定可以用 get 语法,但这种需要指定集合里一个字段的值,可以看看是否满足要求;

    具体可以参考下群聊这块的使用场景:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/security-rules.html#%E7%A4%BA%E4%BE%8B-1%EF%BC%9A%E7%BE%A4%E8%81%8A

    10-22
    有用
    回复 2
    • 10-22
      谢谢你的回复,那么如果安全规则改为: auth.openid in get(`database.xxx.${doc._id}`).users  应该是可以的是吧? 只是会多消耗一次调用次数,对吧?
      10-22
      回复
    • 10-22
      我已经按照文档中类似下面的写法配置安全规则了,但是,前端查询语句要如何写呢? 目前读取数据依然出现“权限不足”。
      10-22
      回复
  • 跨商通
    跨商通
    10-22

    权限设置为所有人可读,再运行你的脚本。

    10-22
    有用
    回复 1
    • 10-22
      就是要限制仅部分人可以read
      10-22
      回复
登录 后发表内容