名图客
名图客
  • 发布:2021-04-29 13:10
  • 更新:2021-04-30 14:02
  • 阅读:860

【报Bug】外键关联拉取数据,会导致权限覆盖

分类:uniCloud

产品分类: uniCloud/腾讯云

操作步骤:

collection('orders,uni-id-users').filed('uid{name,avatar,_id},order_field...)
拉取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之前没有问题。

2021-04-29 13:10 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

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

  • 名图客 (作者)

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

该问题目前已经被锁定, 无法添加新回复