uni-app 外键关联拉取数据,会导致权限覆盖

uni-app 外键关联拉取数据,会导致权限覆盖

操作步骤:

collection('orders,uni-id-users').filed('uid{name,avatar,_id},order_field...).get()

拉取orders,顺便外键用户表的基本信息
然后修改orders表的字段

预期结果:

正常修改

实际结果:

被用户表的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之前没有问题。


更多关于uni-app 外键关联拉取数据,会导致权限覆盖的实战教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

看一下网络请求里面实际发送的数据库请求长什么样,这里说的是password的读取权限,是不是修改完回显的时候访问了password字段。注意联表查询是会用到所有关联关系进行查询的

更多关于uni-app 外键关联拉取数据,会导致权限覆盖的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是发送的请求数据。不是修改完的回显,在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”:}

查询的 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()},{})

回复 名图客: update的时候有多个表名?这个是自动生成的代码还是你自己写的?

回复 DCloud_uniCloud_WYQ: 自动生成的,我写的就是这个this.udb.update(this.order._id, { status: 3,utime: Date.now()},{})

回复 DCloud_uniCloud_WYQ: 总结一句话就是,联表查询,修改单表。修改单主表时会把附表一起修改,所以造成权限错误。3.1.12版本上的问题。

回复 名图客: 自动生成的页面是列表页是吧,你调用了列表页的udb的update方法,目前这样用确实可能存在问题。但是只是权限校验上的问题,即使能校验过去也没法成功修改数据。后续会对这种用法进行修复

回复 DCloud_uniCloud_WYQ: 是的,关联查询订单列表,然后操作单项,最后被password权限阻拦。

回到顶部