奔跑吧阿虎
奔跑吧阿虎
  • 发布:2025-06-28 01:46
  • 更新:2025-06-30 15:55
  • 阅读:138

schema 中的权限控制异常

分类:uniCloud

因为项目比较简单,就没有使用角色、权限等控制,直接使用schema的权限,问题如下:有2张表,

  1. 项目表:( ID,项目名称,创建人ID,其他信息字段),
  2. 项目成员信息表:(ID,项目ID,人员ID,创建人ID,其他信息字段...)

项目成员表我设置了update和delete的权限,例如:

update:

doc.user_id == auth.uid || doc.create_by == auth.uid || get(database.project.${doc.project_id}).create_by == auth.uid

大概意思是以下3类情况,都允许修改:

  1. 如果当前操作的信息,是操作人的信息 : doc.user_id == auth.uid
  2. 如果是当前用户创建的 : doc.create_by == auth.uid
  3. 如果是项目负责人 : get(database.project.${doc.project_id}).create_by == auth.uid

现在执行时,会报错:project-user['.delete']:get方法内参数值必须唯一位置:112-148

翻了很多文档,也搜索了下,都没有正确的解释,麻烦问下这是什么问题?我前端使用了2种方法都不行。

  1. db.collection('project-user').where({ _id: projectUser._id ,project_id: projectUser.project_id }).remove()
  2. db.collection('project-user').doc(projectUser._id).remove()

请教一下,这个应该怎么调试? “方法内参数值必须唯一位置”这个报错信息有点看不明白

感谢帮忙!

2025-06-28 01:46 负责人:DCloud_uniCloud_CRL 分享
已邀请:
奔跑吧阿虎

奔跑吧阿虎 (作者)

我找了一晚上相关信息,还有找到相关的帖子,按照当前的调用方法,每次坑定只能过滤出一条数据,也就是doc,现在doc到底是我要操作的那条数据,还是什么其他的意思?

get(database.project.${doc.project_id}) 正常来说,只能找到唯一的一条数据,现在有点怀疑是BUG,或者我对doc的理解有误。

我使用的是阿里云版本UniCloud。

DCloud_uniCloud_CRL

DCloud_uniCloud_CRL

已确认问题,下个版本修复此问题。

  • 奔跑吧阿虎 (作者)

    修复了踢我一下,谢谢你

    2025-06-30 17:59

要回复问题请先登录注册