collection('orders,uni-id-users').filed('uid{name,avatar,_id},order_field...)
拉取orders,顺便外键用户表的基本信息
然后修改orders表的字段
- 发布:2021-04-29 13:10
- 更新:2021-04-30 14:02
- 阅读:860
产品分类: uniCloud/腾讯云
操作步骤:
预期结果:
正常修改
正常修改
实际结果:
被用户表的password字段权限阻拦了。
被用户表的password字段权限阻拦了。
bug描述:
这个问题不好描述。说一下前提条件,最新版本3.1.12,重新上传了schema。外键自动关联查询也没问题。
问题出在修改上。
条件是这样的:collection('orders,uni-id-users').filed('uid{name,avatar,_id},order_field...).get()
正常拉取完数据没问题。
修改order时报错为:[本地调试]"PERMISSION_ERROR: [orders.uid.password.read]权限校验未通过"
使用unicloud-db组件的update修改order的字段,会牵涉到uni-id-users的password权限,但实际上完全没有去碰users表,
所以,估计是orders表的权限被uni-id-users覆盖了。
3.1.9之前没有问题。
名图客 (作者)
这是发送的请求数据。不是修改完的回显,在unicloud-db组件的update方法就被拦截了,后面还有很多步调用没有执行。数据库也没有任何变动,目前只能回退版本将就着用。
{"provider":"tcb","platform":"h5","param":{"command":{"$db":[{"$method":"collection","$param":["orders,studios,uni-id-users"]},{"$method":"doc","$param":["17453ede608b9fa105823cf244e787f7"]},{"$method":"update","$param":[{"demand":{"attach":[],"unread":true,"content":"修改内容","utime":1619763139549},"utime":1619763139549}]}]},"clientInfo":}
2021-04-30 14:21
名图客 (作者)
查询的 field,where,collection,最后面是修改方法,仅是修改了一下status状态。
field:
'stid{_id,logo,name,uid},uid{_id,nickname,username,avatar},suid{_id,nickname,avatar},name,price,cover,status,options,demand'
where:
(stid._id=='${this.stid}'||uid._id=='${this.user._id}')
collection:
"orders,studios,uni-id-users"
修改方法:
this.udb.update(this.order._id, { status: 3,utime: Date.now()},{})
2021-04-30 14:29
DCloud_uniCloud_WYQ
回复 名图客: update的时候有多个表名?这个是自动生成的代码还是你自己写的?
2021-04-30 14:47
名图客 (作者)
回复 DCloud_uniCloud_WYQ: 自动生成的,我写的就是这个this.udb.update(this.order._id, { status: 3,utime: Date.now()},{})
2021-04-30 16:12
名图客 (作者)
回复 DCloud_uniCloud_WYQ: 总结一句话就是,联表查询,修改单表。修改单主表时会把附表一起修改,所以造成权限错误。3.1.12版本上的问题。
2021-04-30 16:16
DCloud_uniCloud_WYQ
回复 名图客: 自动生成的页面是列表页是吧,你调用了列表页的udb的update方法,目前这样用确实可能存在问题。但是只是权限校验上的问题,即使能校验过去也没法成功修改数据。后续会对这种用法进行修复
2021-04-30 17:08
名图客 (作者)
回复 DCloud_uniCloud_WYQ: 是的,关联查询订单列表,然后操作单项,最后被password权限阻拦。
2021-04-30 17:12