uni-app PERMISSION_ERROR", package['.read']:get方法执行错误,package['.read']:get方法未取到值位置:0-40

uni-app PERMISSION_ERROR", package[’.read’]:get方法执行错误,package[’.read’]:get方法未取到值位置:0-40

操作步骤:

"permission": {  
    "read": "get(`database.uni-id-users.${auth.uid}`).userRemark == doc.userRemark || 'store_manage' in auth.role",  
    "create": "'store_manage' in auth.role",  
    "update": "'store_manage' in auth.role || get(`database.uni-id-users.${auth.uid}`).userRemark == doc.userRemark",  
    "delete": "'store_manage' in auth.role"  
},

预期结果:

正常查询

实际结果:

报错,权限错误

bug描述:

response_data: "{"code":"PERMISSION_ERROR","message":"package['.read']:get方法执行错误:package['.read']:get方法未取到值位置:0-40位置:0-40","systemInfo":[]}"

权限配置:

"read": "get(`database.uni-id-users.${auth.uid}`).userRemark == doc.userRemark || 'store_manage' in auth.role",

当前角色是store_manage


更多关于uni-app PERMISSION_ERROR", package['.read']:get方法执行错误,package['.read']:get方法未取到值位置:0-40的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

当前用户登录了吗?看下网络请求token有没有带上

更多关于uni-app PERMISSION_ERROR", package['.read']:get方法执行错误,package['.read']:get方法未取到值位置:0-40的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据你提供的错误信息和配置,问题出在权限规则的 get() 函数执行失败。错误提示“get方法未取到值”表明在查询 database.uni-id-users.${auth.uid} 时,未找到对应用户记录或字段。

原因分析:

  1. 用户记录不存在auth.uid 对应的用户在 uni-id-users 表中不存在。
  2. 字段缺失:用户记录中缺少 userRemark 字段,导致 .userRemark 访问失败。
  3. 权限时序问题:在权限校验时,用户可能尚未完全初始化或 auth.uid 无效。

解决方案:

  • 检查用户数据:确认 uni-id-users 表中存在 auth.uid 对应的记录,且包含 userRemark 字段。
  • 简化权限规则:由于当前角色已是 store_manage,可暂时将 read 规则简化为 "'store_manage' in auth.role" 进行测试,排除 get() 函数的影响。
  • 添加空值保护:修改规则为 get(database.uni-id-users.${auth.uid})?.userRemark == doc.userRemark || 'store_manage' in auth.role(需确认云函数环境支持可选链操作符)。
  • 调试输出:在云函数或 db_init.json 的权限规则中,通过 console.log 输出 auth.uid 和查询结果,检查具体失败原因。

临时处理: 若急需恢复服务,可将 read 权限改为仅角色校验:

"read": "'store_manage' in auth.role"
回到顶部