我是完全复现了数据库安全规则里面的示例的,结果还是出错,问题和我之前提问的是一样的。
我使用了云环境共享功能,不知道和这个是否有关系
这是之前的提问
https://developers.weixin.qq.com/community/develop/doc/00004010d54000c9546b43ca556800
示例 1:群聊
集合定义
user
{
_id: string,
_openid: string,
name: string,
}
room
{
_id: string,
owner: string, // 群主 openid
name: string, // 群名
members: string[], // 成员 openid 列表
}
message
{
_id: string,
room: string, // 房间 id
sender: string, // 发送者 openid
content: string, // 消息内容
time: Date, // 发送时间
withdrawn: boolean, // 是否已撤回
}
权限规则
user
权限规则
{
"read": "doc._openid == auth.openid", // 私有读
"write": "doc._openid == auth.openid", // 仅能修改自己的信息
}
room
权限规则
{
"read": "auth.openid in get('database.room.${doc._id}').members", // 仅群成员可以读群信息
// 要求管理房间的写操作不能在前端:
// - 原子:建群时需保证room集合的members和各个成员的rooms都写入
// - 权限:仅群主能修改群信息
// - 权限:仅群成员可以拉新成员进群
// - 权限:仅群主可以踢人
"write": false
}
message
权限规则
{
// 仅能读取自己所在房间的聊天消息,且不允许读取已撤回的消息
"read": "auth.openid in get('database.room.${doc.room}').members && doc.withdrawn == false",
// 只能在云函数写:
// - 仅能在自己所在的房间发消息
// - 只能修改自己发送的消息
// - 不能删除自己发送的消息(只能撤回)
"create": "auth.openid in get('database.room.${doc.room}').members",
"update": "auth.openid == doc.sender",
"delete": false
}
查询 / 监听示例
监听自己所在的某个房间的某个时间点之后的新消息(就是监听已接收的某个消息后的新消息):
wx.cloud.init({
env: '环境 ID',
})
const db = wx.cloud.database()
const _ = db.command
const watcher = db.collection('message').where({
room: '房间 id',
time: _.gt(new Date('2019-09-01 10:00')),
}).watch({
onChange: snapshot => {
console.log(`新事件`, snapshot)
},
onError: err => {
console.error(`监听错误`, err)
}
})
我使用的查询查询语句是
还是这个错误。
我也碰到这个问题了,老哥你这问题解决了吗
你好,反馈已收到,我们看看,有结果同步。