幻飞鱼
幻飞鱼
  • 发布:2021-07-19 16:30
  • 更新:2021-07-20 18:27
  • 阅读:537

【报Bug】DBSchema中permission 配置read后,异常拦截问题

分类:uniCloud

产品分类: uniCloud/App

操作步骤:

在schema内permission做如下配置

"permission": {  
	"read": "doc.status==true",  
	"create": true,  
	"update": true,  
	"delete": true  
}

数据库中同时存在status为true和false的数据
用以下语句尝试拿所有status为true的数据

uniCloud.database().collection('order').where('status==true').get()

预期结果:

通过校验,且仅拿到state为true的数据

实际结果:

当数据库里只有status为true的数据时,工作正常
当同时存在false数据时,返回:

 {code: "PERMISSION_ERROR", message: "权限校验未通过"}

同样的情况复现于,希望用户只能读取自己数据的配置
"read": "doc.uid == auth.uid"
选择这样配置read时,当库里有两个以上的uid存在,即使加上了where,依然提示权限校验未通过

bug描述:

DBSchema中permission 配置read后,即使通过where进行符合条件的请求,依然出现权限校验失败

2021-07-19 16:30 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

可以将两种情况的schema和数据给我吗?你连接的是本地云函数还是云端云函数?数据最好是使用云数据库的导出功能,自己复制的可能和实际格式不一致

  • 幻飞鱼 (作者)

    已传,楼下附件


    2021-07-20 18:22

  • 幻飞鱼 (作者)

    回复 幻飞鱼: 本地、云端都试过过,表现一致


    2021-07-20 18:24

幻飞鱼

幻飞鱼 (作者)

这个schema写的是
"read": "doc.mod=='ml'"

3条数据里两个mod是ml,一个mod不是ml
这个时候使用uniCloud.database().collection('XXX').where("mod=='ml'").get()
这样的方式 就会权限校验失败

改为
"read": true
就一切正常,但是schema的权限作用没有发挥

  • DCloud_uniCloud_WYQ

    还是没复现上面的问题,可以加我QQ详细聊一下吗?qq: 2292434668


    2021-07-20 19:29

  • 幻飞鱼 (作者)

    回复 DCloud_uniCloud_WYQ: 我好像找到问题了

    是加上了field之后报错,因为我把field写在了where前面,像这样

    uniCloud.database().collection('XXX').field('name').where("mod=='ml'").get()


    修改成

    uniCloud.database().collection('XXX').where("mod=='ml'").field('name').get()

    之后,目前问题已解决


    谢谢帮助


    2021-07-21 09:16

  • DCloud_uniCloud_WYQ

    回复 幻飞鱼: 因为存在用户将某字段重命名或者通过计算覆盖原始字段的可能性,所以field在where之前时,where不会作为权限校验依据


    2021-07-21 10:54

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