z***@outlook.com
z***@outlook.com
  • 发布:2022-09-02 18:00
  • 更新:2022-10-03 13:34
  • 阅读:483

uni-cloud-router怎么用JQL,权限永远是验证失败

分类:uniCloud

uni-cloud-router里的中间件加了

onst uniId = UniId.createInstance({context: ctx.context});
const dbJQL =
uniCloud.databaseForJQL({event: ctx.event, context: ctx.context});

context里确定有uniIdToken
用const auth = await uniId.checkToken(ctx.event.uniIdToken)也验证了token没问题

schema设定了权限表全部为true,但还是报错{"code":"PERMISSION_ERROR","message":"权限校验未通过"}

尝试了使用
dbJQL.setUser({ // 指定后续执行操作的用户信息,此虚拟用户将同时拥有传入的uid、role、permission
uid: auth.uid, // 建议此处使用真实uid
})
强行注入用户也还是校验权限未通过

但使用admin用户就可以访问,可是schema已经全部设定了true为啥还会这样啊?

2022-09-02 18:00 负责人:无 分享
已邀请:
z***@outlook.com

z***@outlook.com (作者)

同时,用传统mongo的方法获取的话是完全无视schema permission吗?全都设成了false也还是可以获取到文档

  • DCloud_uniCloud_WYQ

    只有jql会走权限校验,schema内搜一下permission 和 password看看有没有特别的值不允许读写。另外检查一下连的是本地云函数还是云端云函数,schema有没有同步

    2022-09-02 18:34

  • z***@outlook.com (作者)

    回复 DCloud_uniCloud_WYQ: 哦,mongo那个是没看仔细,JQL权限的问题是创建了一张新表,就一个uid, _id俩字段,permission只有表级permission,全部为true,但还是不行,本地和云函数都试过了而且schema也都同步了

    2022-09-02 19:07

  • z***@outlook.com (作者)

    回复 DCloud_uniCloud_WYQ: 又试了一下,云端函数可以了,但是本地还是不行

    2022-09-02 19:25

  • z***@outlook.com (作者)

    回复 DCloud_uniCloud_WYQ: 尝试清理了本地token缓存也不行

    2022-09-02 19:27

  • DCloud_uniCloud_WYQ

    回复 z***@outlook.com: 云端和本地schema一致吗?

    2022-09-05 12:02

  • 5***@qq.com

    回复 DCloud_uniCloud_WYQ: 我也遇到和楼主同样的问题,表级权限全部为true,字段没有设置权限,在uni-cloud-router,使用uniCloud.databaseForJQL({event: ctx.event, context: ctx.context});创建对象,一直都是权限校验未通过,求解?

    2022-10-02 21:23

5***@qq.com

5***@qq.com

部分表结构如图

5***@qq.com

5***@qq.com

只是简单的读取,一直不行,快崩溃了

5***@qq.com

5***@qq.com

附件里面有云函数代码(auth.zip),schema(schema.zip),和调用截图。
我的环境是用uni-cloud-router,访问auth.common.getCurrentUser(),用户注册及数据表用的是uni-id-co,注册完毕后,使用auth.common.getCurrentUser()方法获取对应的用户,无论如何设置,结果都是权限校验未通过,不知是何原因?同时,我进行了反向测试,即访问order表的数据(schema中有提供),用同样的代码访问,无论在order.schema中如何限制读取访问,客户端都能读取到数据,不知何故,特此请教。

呆狗的一生

呆狗的一生 - 呆狗的一生

经测试,功能正常,要注意的是password字段因为密码安全问题,是不可查询的。我上传了完整demo,把你那个zz-common上传看看

  • 呆狗的一生

    另外uni-cloud-router用npm安装就行

    2022-10-03 13:24

  • 5***@qq.com

    回复 呆狗的一生: 非常感谢,问题已解决,原因是因为“password字段因为密码安全问题,是不可查询的。”,所以对于uni-id-users表,在where前必须用field删选掉password字段,否则会出现“权限校验未通过”的提示。

    2022-10-03 18:02

要回复问题请先登录注册