当前位置: 首页 > news >正文

健身房私教管理系统 01:用户体系与多角色注册闭环

目录

  • 前言
  • 一、 核心数据模型:门店与用户表
  • 二、 深度解析:微搭的三种用户机制
  • 三、 注册与登录闭环业务流
    • 阶段一:云原生拦截与 身份初始化
    • 阶段二:业务系统的身份绑定(欢迎页路由分发)
  • 四、创建应用
  • 五、创建页面
  • 六、 核心逻辑代码实现

前言

本次实战课程,我们以健身房私教课程为业务场景,以腾讯云开发作为开发工具,系统讲解系统搭建过程。

在正式开始搭建健身房私教管理系统之前,我们必须先跨过一道门槛:用户权限与注册机制

对于一套包含管理端和小程序端的完整业务系统而言,我们需要同时服务于老板、教练和学员。如何优雅地处理这些角色的登录、注册和权限分配?本文将从数据库设计出发,带你彻底理清腾讯云微搭的用户体系底层逻辑,并实现一个完整的外部用户注册闭环。

一、 核心数据模型:门店与用户表

在我们的系统设计中,一切业务流转都建立在统一的身份管理之上。我们主要围绕两张核心表展开:

门店表 (fit_store_branches):支持未来多门店的扩展,记录门店的编码、地址、经纬度等基础信息。

字段名称字段标识数据类型描述
门店IDid文本主键
门店名称name文本-
门店编码code文本唯一
地址address文本-
手机号phone电话号码-
经纬度location对象{“lat”: , “lng”: }
营业时间business_hours文本-
状态statusenum启用/禁用
排序sort_order数字-

用户主表 (fit_users):这是系统的统一鉴权与身份管理表,包含学员、教练、管理员所有用户。

字段名称字段标识数据类型描述
用户IDid文本主键
手机号phone电话号码唯一索引
姓名real_name文本-
昵称nickname文本-
头像avatar图片-
角色role枚举学员/ 教练 / 管理员 / 员工
微信OpenIDwx_openid文本小程序登录
状态status枚举启用/禁用/待激活
最后登录时间last_login_at日期时间-
所属门店store_id关联关系多门店支持,关联门店表,多对一

数据库的创建方式参考视频门店管理、用户管理相关操作

二、 深度解析:微搭的三种用户机制

要做好注册闭环,必须先理解微搭底层的用户分类机制。在微搭体系中,用户被严格划分为三种类型:

  1. 内部用户:通过用户名和密码登录,拥有较高的系统权限,通常只能在 PC 端(管理后台)使用
  2. 匿名用户:免登录即可访问小程序端的用户,通常只能浏览公开信息。
  3. 外部用户:通过手机号、微信授权等方式登录小程序端的用户。

架构决策:在我们的健身房系统中,无论是需要在小程序端约课的学员,还是需要查看排班的教练,甚至是偶尔用手机看报表的管理员,只要在小程序端进行交互,我们统一采用外部用户机制进行注册和鉴权。

三、 注册与登录闭环业务流

传统的业务开发往往需要手写冗长的 Token 校验和拦截逻辑,但在微搭中,我们可以利用云开发的特性,将注册闭环简化为以下两个阶段:

阶段一:云原生拦截与 身份初始化

当用户首次打开我们的小程序时:

  1. 云开发底层会检测到当前用户是未认证状态。
  2. 系统自动将其拦截至官方提供的登录页,要求用户提供手机号和验证码
  3. 用户完成验证后,首次登录会在微搭的身份库中自动注册一个基础账号。此时,用户在云开发底层有了合法的身份。

阶段二:业务系统的身份绑定(欢迎页路由分发)

虽然用户在云开发身份认证层注册了,但我们的业务主表fit_users里还没有他的详细信息。因此,我们将小程序的“首页”设计为一个动态欢迎页,利用按钮状态来控制路由:

  1. 获取凭证:用户登录进入欢迎页后,我们通过微搭的全局对象$w.auth获取当前用户的手机号。
  2. 数据库查验:根据该手机号,去fit_users表中进行精确匹配。
  3. 状态分发
  • 已存在(老用户):说明该用户已完成业务注册。我们将查询到的用户信息(如角色、姓名、门店)赋值给全局变量,欢迎页按钮显示为“进入系统”,点击直达业务工作台。
  • 不存在(新用户):说明是首次访问的新客。欢迎页按钮显示为“用户注册”,点击后跳转至完善信息页面(填写姓名、选择角色等),提交后再写入fit_users表,完成真正的业务注册。

四、创建应用

在搭建小程序的时候,首先需要创建应用。打开控制台,在左侧导航菜单选择微搭低代码,在右侧内容区域选择小程序,从空白创建

添加应用的名称,启用登录

创建应用后,我们需要调整一下登录方式,选择调整规则链接

选择前往身份认证

勾选短信验证码登录

勾选短信验证码主要是在登录的时候得到用户的手机号,openid主要是用在支付时候提供

五、创建页面

创建应用的时候,默认会提供一个空白页,需要把他重命名为欢迎页

六、 核心逻辑代码实现

在欢迎页的生命周期方法如页面加载完成时,我们可以通过$w.cloud.callDataSource来实现上述的查验逻辑。创建一个全局的登录方法

创建一个全局对象用来保存用户的信息

创建一个全局变量用来标识用户是否注册

全局的登录方法代码如下:

exportdefaultasyncfunctionlogin(){// 1. 显示加载状态,优化用户体验$w.utils.showLoading({title:'身份核验中',mask:true});//try{// 2. 从微搭 Auth 对象获取当前外部用户的手机号constuserPhone=await$w.auth.currentUser.phone||"15122334455";if(!userPhone){$w.utils.showToast({title:'获取手机号失败',icon:'error'});//return;}// 3. 调用数据源查询业务用户表constres=await$w.cloud.callDataSource({dataSourceName:'fit_users',methodName:'wedaGetRecordsV2',//params:{filter:{where:{$and:[{phone:{$eq:userPhone}},// 精确匹配手机号]}}}});// 4. 路由与状态分发if(res.records&&res.records.length>0){// 查到用户:存入全局变量(假定已定义全局变量 userInfo 和 isRegistered)$w.app.dataset.state.userInfo=res.records[0];$w.app.dataset.state.isRegistered=true;}else{// 未查到用户:标记为未注册$w.app.dataset.state.isRegistered=false;}}catch(error){console.error("用户核验失败",error);}finally{$w.utils.hideLoading();//}}

选中页面组件,给页面显示的时候绑定方法,绑定我们的全局登录

通过这套机制,我们完美地将底层的云开发 Auth 体系与我们的业务强耦合,既保证了数据安全,又利用了低代码平台的便利性,实现了多角色在小程序的无缝接入。

http://www.jsqmd.com/news/842520/

相关文章:

  • 2026年热门的钢制侧向防火卷帘多家厂家对比分析 - 品牌宣传支持者
  • Docker Compose部署Nginx Proxy Manager保姆级教程:从端口映射到数据持久化全解析
  • STM32F108C8T6小白入门特训营__1.4GPIO.C 代码分析
  • 零基础API开发指南:零基础小白从入门到精通,高效打通数据“任督二脉”?
  • 为什么 SAP S/4HANA 的前端更常用 SAPUI5,而不是 React、Vue 或 Angular
  • * 阿里云百炼:免部署直接调用云端大模型
  • 从选题到定稿不熬夜:2026 年 10 款 AI 毕业论文工具实测,Paperxie 领衔全流程通关
  • COSI-Corr安装保姆级教程:从官网注册到ENVI环境变量配置,一次搞定
  • 2026职场进阶学数据分析的价值
  • 护眼钢化膜是智商税?圆偏振光+AR降反射实测,观复盾用硬核技术给出答案
  • 【NotebookLM戏剧研究辅助实战指南】:20年戏剧学者亲授AI赋能文本细读的5大黄金工作流
  • HarmonyOS 6学习:从视频加载到长截图——性能优化实战全解析
  • 学Simulink——基于 PWM 加相移混合控制的双向 DC-DC 变换器仿真
  • SBA系列生物传感分析仪的工作原理是什么?
  • Spring AI Alibaba零基础速成(2) ---- Ollama安装与使用
  • 玩客云直刷Armbian集成宝塔:一站式搭建个人服务器
  • 深度强化学习在卫星姿态控制中的应用与挑战
  • Warcraft Helper完整指南:让经典魔兽争霸3在现代Windows系统焕发新生
  • NotebookLM投稿窗口期预警:这7本SCI期刊正试点AI辅助审稿,截止前48小时提交优先处理!
  • PPTX判断包含图表id
  • Godot游戏开发:有限状态机(FSM)框架YAFSM原理与应用实战
  • 从JT/T 808到1078:构建道路运输车辆卫星定位系统的协议栈全景解析
  • coze 实战:萌宠摆摊视频工作流,一键自动生成趣味短片
  • 利用Token Plan套餐实现大模型API用量与成本的可控管理
  • 《Java 100 天进阶之路》第26篇:Java注解(Annotation)详解
  • 从‘密码长度’到‘任意代码执行’:手把手复现攻防世界int_overflow靶场(附Python3 EXP)
  • TVA智能体范式的工业视觉革命(7)
  • 从游戏显卡到专业GIS:如何为你的SuperMap三维场景挑选并调校一张合适的显卡
  • TVA智能体范式的工业视觉革命(8)
  • 深入QGIS矢量数据底层:手写WKT字符串添加几何图形,一次搞懂空间数据存储原理