安全规则,官方文档的问题?
发布于 5 年前 作者 lei45 8860 次浏览 来自 官方Issues

最下是官方文档授权给一些人的安全规则案例

然而事实上,我自己去写的时候,以下不起作用:

{

  "read": "auth.openid in doc.teacher || doc._openid == auth.openid",

  "write": "auth.openid in doc.teacher || doc._openid == auth.openid",

}


以下起作用:

把IN 换成了 ==,查询条件页换成直接使用'{openid}'

{

  "read": "auth.openid == doc.teacher || doc._openid == auth.openid",

  "write": "auth.openid == doc.teacher || doc._openid == auth.openid",

}

-------------------------
db.collection("集合id")
  .where(    _.or([
      { _openid: "{openid}" }, 

      { teacher: "{openid}" }
    ]))

who can help me find the problem???

----------------------------------------------------------------------------------------------官方文档--------------------------------------------------------------------------------------------------------

2、把权限指定给某些人

上面的这个角色指定是一对一、或多对一的指定,也可以是一对多的指定,可以使用in!(xx in [])运算符。比如下面是可以给一个记录指定多个角色(学生创建的记录,多个老师有权读写):

//文档的结构

{

  _id:"handwork20201020",

  _openid:"学生的openid", //学生为记录的创建者,

  teacher:["老师1的openid","老师2的openid","老师3的openid"]

}

//安全规则

{

  "read": "auth.openid in doc.teacher || doc._openid == auth.openid",

  "write": "auth.openid in doc.teacher || doc._openid == auth.openid",

}

这里要再强调的是前端(小程序端)的 where 条件必须是安全规则权限的子集,比如我们在小程序端针对老师进行如下查询('{openid}'不支持查询指令,需要后端获取)

db.collection("集合id")
  .where({
    _openid: "{openid}",

    teacher: _.elemMatch(_.eq("老师的openid")),
  })
  .get()

  .then((res) => {
    console.log(res);
  });
回到顶部