微信小程序云开发数据库不能读写的权限问题
许多人遇到不能更新云数据库字段的问题,这里说明一下
·
许多人遇到不能更新云数据库字段的问题,这里说明一下
需要更细节的了解权限请阅读
微信官方文档-数据库安全规则
首先需要明白,云数据的角色只有两种,一种是所有用户,一种是创建者,这里的创建者更多指的是记录的创建者而不是集合的创建者
记录指的是
所以权限的限制就这这两个角色上,接下来使用实验来说明
<input placeholder="填写要更新的id" bindinput="updateInput"></input>
<input placeholder="填写更新后的名字" bindinput="updateName"></input>
<button bindtap="updateData">更新数据</button>
<button bindtap="getData">查询数据</button>
<input placeholder="输入名字" bindinput="addName"></input>
<input placeholder="输入年龄" bindinput="addAge"></input>
<button bindtap="addData">添加数据</button>
const DB =wx.cloud.database().collection('test');
let updateID,updateName,name,age
Page({
//要更新的ID
updateInput(event) {
console.log("要更新的id", event.detail.value);
updateID = event.detail.value;
},
//更新后的名字
updateName(event) {
console.log("要更新的name", event.detail.value);
updateName = event.detail.value;
},
//更新数据
updateData() {
DB.doc(updateID).update({
// data 传入需要局部更新的数据
data: {
// 表示将 done 字段置为 true
name: updateName
},
success: function (res) {
console.log("修改成功", res)
},
fail:console.error
})
},
//查询数据
getData() {
DB.get({
success(res) {
console.log("查询成功", res)
},
fail:console.error
})
},
//添加Name
addName(event) {
name = event.detail.value;
},
//添加Age
addAge(event) {
age = event.detail.value;
},
//添加数据
addData() {
DB.add({
data: {
name: name,
age: age
},
success(res) {
console.log("成功", res);
},
fail(res) {
console.log("失败", res);
}
})
}
})
在控制台手动创建test集合并添加一条记录
由小程序创建一条记录
可以看出小程序创建的记录中自动添加了
_openid
字段,那么这个字段的用处是什么呢
当前集合的权限是仅创建者课读写
在小程序中点击查询
可以看到只显示了刚才通过小程序创建的带有
_openid
字段的记录
在小程序中尝试修改由控制台创建的记录
可以看到没有记录被更新
在小程序中尝试修改小程序创建的记录
可以看到修改成功了
所以应该怎样修改没有_openid
字段或者_openid
并不是当前用户的记录呢?解决方法是修改权限让所有用户
这个角色可读可写
让所有用户
可读
再次查询发现两条记录都可以看到
让所有用户
可写,但不可读
再次查询时
修改控制台创建的记录
修改小程序创建的记录
所有用户
可读可写的自定义权限
{
"read": true,
"write": true
}
自定义权限就不讲了,可以看看文章开头的官方文档
如果不想因为权限问题发愁也可以使用云函数或后台的方式来调用数据库
如果还有问题可以评论区留言
更多推荐
已为社区贡献2条内容
所有评论(0)