最下是官方文档授权给一些人的安全规则案例
然而事实上,我自己去写的时候,以下不起作用:
{
"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);
});