收藏
回答

跨字段查询时安全规则如何匹配?

若查询对象有确定的键值,那么安全规则可以直接使用。如:.where({ _openid: "{openid}" }) 的安全规则可为:auth.openid == doc._openid

但若为跨字段查询:.where(_.or({ _openid: "{openid}" }, { adminstrators: _.in(["{openid}"]) })) 此时,上述的安全规则无效。

那么这种情况应该该如何编写安全规则?

自己揣摩的doc.or[0]._openid == auth.openid 也无效

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

1 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2021-06-18

    adminstrators 是一个数组?

    如果是,试试

    auth.openid == doc._openid || auth.openid in doc.adminstrators


    如果不是,试试

    auth.openid == doc._openid || auth.openid == doc.adminstrators


    2021-06-18
    有用 1
    回复 8
    • 烧饼
      烧饼
      2021-06-18
      谢谢回答,adminstrators是数组,只能通过键值对的方式结合==来匹配,似乎不能识别["{openid}"]的形式,无论用in还是==,但替换成实际的openid倒可以了。而且实测下来,or查询每一项都要匹配到安全规则才行,有一项没写都要报错
      2021-06-18
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2021-06-21回复烧饼
      如果是数组 auth.openid == doc._openid || auth.openid in doc.adminstrators 这么写不行吗
      2021-06-21
      回复
    • 烧饼
      烧饼
      2021-06-21
      我这边的查询条件下实测不行,数组形式的["{openid}"]似乎在安全规则里没被替换成实际的openid,我传入写死openid的数组倒是可以
      2021-06-21
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2021-06-22回复烧饼
      你好奇是怎么写的,截个图看看?
      2021-06-22
      回复
    • 烧饼
      烧饼
      2021-06-22
      安全规则、查询语句分别如图。数据库中是有["openid"]完全匹配的数据的
      2021-06-22
      回复
    查看更多(3)
登录 后发表内容