uni-app如何实现uniCloud云开发中的用户权限校验

幻夢星雲

幻夢星雲

2026-08-04

289人浏览

原创

最轻量可靠的方式是用uniid.checktoken返回的permission数组做本地判断,但必须配合服务端数据库权限规则校验;permission由服务端动态生成,前端应使用includes而非indexof比对,且敏感操作需每次执行前重新checktoken。

uni-app如何实现unicloud云开发中的用户权限校验

直接用 uniID.checkToken 拿到的 permission 字段做本地判断,是最轻量、最可靠的方式;但必须配合服务端权限规则(如数据库 permission 字段校验),否则前端校验可被绕过。

uniID.checkToken 返回的 permission 怎么用

调用 uniID.checkToken 后,响应中若含 permission 数组,说明你在云函数或 uni-id 配置里启用了权限扩展(needPermission: true)。这个数组是服务端根据用户角色、自定义权限策略动态生成的,不是硬编码在前端的。

  • 它只代表「当前 token 有效时,服务端认定你拥有的权限」,不等于前端能随意渲染按钮或跳转路由
  • 不要手动拼接字符串去比对,比如 res.permission.indexOf('USER_EDIT') !== -1 —— 应该用 includes
  • 示例逻辑:
    const { code, permission } = await uniID.checkToken(token);
    if (code === 0 && permission?.includes('ARTICLE_PUBLISH')) {
      // 可显示发布按钮
    }
  • 注意:uniID.checkToken 是异步的,别在 onLoad 里裸调,建议加 loading 或缓存上一次结果避免重复请求

数据库层面的权限控制不能省

前端拿到 permission 只是“知道有权限”,真正执行写操作(如新增文章)时,必须靠数据库权限规则拦截非法请求。否则用户改掉前端 JS 就能绕过。

uni-app
uni-app

uni-app 官方文档、npm 包和项目创建入口。

下载
  • 在数据库集合的权限配置 JSON 中,要用 auth.permission 做条件,例如:
    "read": "doc.status == 0 || auth.permission.includes('ARTICLE_MANAGE')",
    "write": "auth.permission.includes('ARTICLE_PUBLISH')"
  • 别写成 auth.role == 'admin' 这种静态判断——角色可能变,权限应独立管理
  • 如果集合没配权限规则,哪怕前端判断正确,db.collection('articles').add(...) 也会被拒绝,报错类似 Unauthorized
  • 权限字段名要和 uniID.checkToken 返回的一致,大小写敏感,且必须是字符串数组(不是对象或数字)

云函数里怎么复用同一套权限逻辑

你在云函数中调用 uniCloud.getCurrentUserInfo(),返回值结构和 uniID.checkToken 基本一致,也带 permission 字段。这是服务端视角的权威权限快照。

  • 别在云函数里再调一次 uniID.checkToken —— 多余,且可能因 token 过期失败
  • 直接解构使用:
    exports.main = async function(event, context) {
      const { uid, role, permission } = await uniCloud.getCurrentUserInfo();
      if (!permission?.includes('USER_DELETE')) {
        return { code: 403, msg: '无删除权限' };
      }
      // 执行删除逻辑
    };
  • 注意:该 API 仅在客户端调用云函数(非匿名)时可用;若用 uniCloud.callFunction 且未传 token,会返回空对象
  • 如果你的云函数需支持免登录场景(如公开查询),权限判断要额外加 uid != null 分支

容易被忽略的权限同步时机

用户在后台改了角色或权限,前端不会自动感知 —— uniID.checkToken 返回的是 token 签发时的状态,token 过期前不会刷新。

  • 除非你主动重登或调用 uniID.refreshToken,否则权限变更要等下次登录才生效
  • 不要依赖「实时监听权限变化」,uniCloud 没提供这类推送机制
  • 敏感操作(如支付、删账号)建议每次执行前都重新 checkToken,而不是复用页面加载时缓存的结果
  • 如果业务要求强实时性,可在用户权限变更后,服务端主动使旧 token 失效(通过修改 uni-id-users 表的 tokenVersion 字段,并在 checkToken 逻辑中校验)

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

uni-app

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1083

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

2188

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

2081

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

2231

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

333

5

墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

0

21

墨刀AI完整入门
墨刀AI完整入门

PHP中文网为您倾力打造墨刀AI保姆级入门指南完整版!本合集从零基础讲起,涵盖AI生成原型、提示词优化、图片转原型及多轮对话等核心功能。无论您是新手还是进阶用户,都能轻松掌握产品设计全流程。快来PHP中文网,一键解锁高效设计技巧,让想法即刻成型!

2026.08.04

0

20

墨刀AI进阶技巧
墨刀AI进阶技巧

本合集由PHP中文网精心整理,为您提供墨刀AI核心进阶策略指南。内容涵盖高效提示词写作、原型智能生成与微调、结构化导图制作及行业分析报告输出等实战技巧。助您轻松掌握AI设计工具,大幅提升产品设计与团队协作效率。

2026.08.04

0

14

火山引擎实名认证失败怎么办
火山引擎实名认证失败怎么办

火山引擎实名认证失败可能与证件信息填写错误、姓名或企业信息不一致、证件照片不清晰、营业执照状态异常、手机号验证失败或审核资料不完整有关。本专题整理个人认证、企业认证、资料上传、审核退回、重新提交和认证不通过的常见处理方法。

2026.08.04

2

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习