家政维修平台实战20:权限设计

news2025/6/12 23:03:03

目录

  • 1 获取工人信息
  • 2 搭建工人入口
  • 3 权限判断
  • 总结

目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色,在访问后台的时候界面该如何呈现呢?

本篇我们就来介绍一下权限的设计。

1 获取工人信息

在用户管理的API中,我们有一个获取用户信息的方法,通过openid来去获取
在这里插入图片描述
作为顾客直接从用户表里获取没啥问题,作为员工就需要从工人表或者员工表来获取,先完善一下逻辑

const ErrorCode = {
            SUCCESS: 0,
            PARAM_ERROR: 1001,
            NOT_FOUND: 1002, // 用户未找到(未注册)
            SYSTEM_ERROR: 1003,
            // USER_EXISTS: 1004, // 注册时用
            // USER_NOT_EXISTS: 1005 // 可以用 NOT_FOUND 代替
        };

        // 获取用户信息及会员状态 (用于登录判断)
        module.exports = async function (params, context) {
            const { openid } = params;

            // 1. 参数验证
            if (!openid) {
                return {
                    code: ErrorCode.PARAM_ERROR,
                    message: '参数错误,openid 缺失'
                };
            }

            try {
                // 2. 根据 openid 查询用户信息
                const userResult = await context.callModel({
                    name: "jz_users", // 查询用户表
                    methodName: "wedaGetRecordsV2",
                    params: {
                        filter: {
                            where: {
                                $and: [ 
                                    {
                                        openid: { $eq: openid },
                                    },
                                ],
                            },
                        },
                        select: { $master: true }, // 获取主表字段
                        getCount: true,
                        pageSize: 1,
                        pageNumber: 1,
                    }
                });
                console.log("getUserInfo - userResult", userResult);

                // 检查用户是否存在
                if (userResult.total === 0) {
                    return {
                        code: ErrorCode.NOT_FOUND,
                        message: '用户未注册' // 返回用户未找到的特定错误码
                    };
                }

                const user = userResult.records[0]; // 获取用户信息

                // 3. 查询会员信息(如果用户存在)
                const memberResult = await context.callModel({
                    name: "jz_members", // 查询会员表
                    methodName: "wedaGetRecordsV2",
                    params: {
                       filter: {
                            where: {
                                $and: [ 
                                    {
                                        userId: { $eq: user._id },
                                    },
                                ],
                            },
                        },
                         select: { userId: true,level:true,status:true,points:true,balance:true }, // 获取主表字段
                         getCount: true,
                         pageSize: 1,
                         pageNumber: 1,
                    }
                });
                 console.log("getUserInfo - memberResult", memberResult);

                // 4. 组合返回结果
                const isMember = memberResult.records && memberResult.records.length > 0;
                const memberInfo = isMember ? memberResult.records[0] : null; // 如果是会员则返回会员信息
                // 5. 查询员工信息(如果员工存在)
                const workerResult = await context.callModel({
                    name: "jz_fwssq", // 查询会员表
                    methodName: "wedaGetRecordsV2",
                    params: {
                       filter: {
                            where: {
                                $and: [ 
                                    {
                                        ssyh: { $eq: user._id },
                                    },
                                ],
                            },
                        },
                         select: { ssyh: true,xm:true,zwjs:true,grzp:true,gzjy:true,fwlb:true,sjhm:true }, // 获取主表字段
                         getCount: true,
                         pageSize: 1,
                         pageNumber: 1,
                    }
                });
                 console.log("getUserInfo - workerResult", workerResult);

                // 6. 组合返回结果
                const isWorker = workerResult.records && workerResult.records.length > 0;
                const workerInfo = isWorker ? workerResult.records[0] : null; // 如果是工人则返回工人信息
                return {
                    code: ErrorCode.SUCCESS,
                    data: {
                        isRegistered: true, // 明确标记用户已注册
                        isMember: isMember, // 标记用户是否是会员
                        isWorker: isWorker,//标记用户是否是工人
                        userInfo: user, // 返回用户信息
                        memberInfo: memberInfo, // 返回会员信息 (如果存在),
                        workerInfo: workerInfo//返回工人信息
                    }
                };

            } catch (error) {
                console.error("getUserInfo error:", error);
                return {
                    code: ErrorCode.SYSTEM_ERROR,
                    message: `系统错误: ${error.message}`
                };
            }
        }

在原有的逻辑里,我们增加了工人信息的判断

2 搭建工人入口

在小程序的我的界面,添加一个工人入口的菜单
在这里插入图片描述
然后创建一个工作台的页面
在这里插入图片描述
切换到布局设计,新建一个布局
在这里插入图片描述
将布局名称改为工人布局
在这里插入图片描述
然后将第一个菜单改为工作台,页面选择我们的工作台页面
在这里插入图片描述
切换回页面设计,布局选择我们的工人布局
在这里插入图片描述

3 权限判断

在我的页面,给工人入口添加点击事件,添加一个逻辑分支,判断用户是否为工人
在这里插入图片描述

If($w.app.dataset.state.userData.isWorker, true, false)

如果是工人,我就打开页面,跳转到工作台
在这里插入图片描述
不是工人我们就提示用户,非工人角色
在这里插入图片描述
在工作台界面,我们添加一个普通容器里边放置一个文本组件,显示无权限访问
在这里插入图片描述
通过绑定条件展示,来决定是正常显示页面还是显示无权限访问
在这里插入图片描述

总结

本篇我们介绍了工人的工作台页面的权限控制,首先是入口就要判断身份,进入页面后再次验证权限。小程序有的会搭建一个登录页,其实那只是自己骗自己,起不到啥作用。

为啥说起不到啥作用,因为你本身就是匿名访问,而且能获取到用户的身份信息,没必要再二次增加验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2407734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹

MMaDA: Multimodal Large Diffusion Language Models

CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…