news 2026/4/23 14:34:34

Solon + EasyQuery + ElementPlus 实现后台管理系统之 08-权限认证优化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Solon + EasyQuery + ElementPlus 实现后台管理系统之 08-权限认证优化

精确到按钮级别的权限认证

基础原理

按钮级权限控制不是锦上添花,而是保障系统安全和用户体验的刚需,原因在于:

  • 数据安全与操作合规:不同角色的用户能执行的操作不同(比如普通员工只能查看数据,管理员能删除 / 编辑),如果仅做页面级权限,用户可能通过伪造请求(比如绕过前端手动调接口)执行越权操作,按钮级控制能从前端直接屏蔽非法操作入口,减少恶意请求。
  • 提升用户体验:避免给用户展示看得见但点不了的按钮,或点击后提示无权限的尴尬场景,让界面只显示用户真正能操作的功能,降低使用困惑。
  • 统一权限逻辑:前端和后端权限规则对齐,避免前端显示按钮但后端拒绝请求的不一致问题,减少前后端联调成本。

前端实现按钮级别的权限认证的核心逻辑:先获取用户权限标记集合 ->在渲染按钮时校验权限 -> 最终决定按钮是否显示/禁用。

前端优化

编写登录用户数据仓库(store/currentUser.js),存储当前登录用户权限标记列表:

import{ref,computed,reactive}from'vue'import{defineStore}from'pinia'exportconstuseCurrentUserStore=defineStore('currentUser',()=>{// 登录用户信息实体letcurrentUser=reactive({})// 当前用户菜单列表letcurrentMenu=reactive([])// 当前用户权限标记letcurrentPerms=reactive([])// 设置登录用户信息实体functionsetCurrentUser(currentUser){this.currentUser=currentUser}// 设置当前用户菜单列表functionsetCurrentMenu(currentMenu){this.currentMenu=currentMenu}// 设置当前用户权限标记functionsetCurrentPerms(currentPerms){this.currentPerms=currentPerms}functionhasPerms(identifier){// 判断当前用户是否拥有指定权限标记returnthis.currentPerms.includes(identifier)}return{currentUser,setCurrentUser,currentMenu,setCurrentMenu,currentPerms,setCurrentPerms,hasPerms}})

编写权限工具类(plugins/PermsUtil.js),优化将用户权限标记存储到仓库中方法:

// 将用户权限菜单存储到仓库中useCurrentUserStore().setCurrentMenu(toTreeList(response.data,false))// 将用户权限标记存储到仓库中(包含所有类型的权限)useCurrentUserStore().setCurrentPerms(response.data.map(perm=>perm.identifier))

编写页面组件,完善按钮级别的权限认证:

<el-buttontype="warning"@click="showAddDialog"v-if="useCurrentUserStore().hasPerms('system:users:add')">添加用户</el-button>

在浏览器中测试:

后端 API 的权限认证

基础原理

参考文档:https://sa-token.cc/doc.html#/use/jur-auth、https://sa-token.cc/doc.html#/use/at-check

后端 API 是系统数据和业务操作的唯一入口,前端权限认证仅为体验层防护,后端权限认证才是真正的安全兜底,原因在于:

  • 防越权操作:前端权限可被轻易绕过(比如通过 Apifox、抓包工具直接调用 API,或修改前端代码),如果后端不校验权限,恶意用户能执行删除数据、修改配置等高危操作,直接威胁系统安全。
  • 符合业务规则:不同角色的用户本就该有不同操作范围(如普通员工只能查数据,管理员能删数据),API 权限认证是业务规则在后端的落地,确保什么人能做什么事。
  • 降低系统风险:即使前端漏洞导致权限控制失效,后端的权限校验仍能拦截非法请求,避免单点漏洞引发全系统风险。

后端 API 实现权限认证的核心逻辑:登录生成身份凭证 Token -> 接口调用时校验凭证有效性并关联用户 -> 查询用户权限集合与 API 权限要求匹配 -> 匹配成功放行/失败拦截。

后端优化

编写权限认证是嫌累(cn.duozai.sadmin.config.StpInterfaceImpl),返回一个账号所拥有的权限码集合:

/** * SaToken权限认证实现类 */@ComponentpublicclassStpInterfaceImplimplementsStpInterface{/** * 返回一个账号所拥有的权限码集合 * @visduo * * @param loginId 登录id * @param loginType 登录类型 * @return 权限码集合 */@OverridepublicList<String>getPermissionList(ObjectloginId,StringloginType){// 从会话中获取权限列表(获取当前登录用户权限列表时存入)List<PermsEntity>permsList=(List<PermsEntity>)StpUtil.getSession().get("perms");// 遍历权限列表,获取权限标识列表List<String>identifierList=newArrayList<>();for(PermsEntitypermsEntity:permsList){identifierList.add(permsEntity.getIdentifier());}// 返回权限标识列表returnidentifierList;}/** * 返回一个账号所拥有的角色标识集合 (权限与角色可分开校验) * @visduo * * @param loginId 登录id * @param loginType 登录类型 * @return 角色标识集合 */@OverridepublicList<String>getRoleList(ObjectloginId,StringloginType){returnnewArrayList<>();}}

编写控制器,完善方法级别的权限认证:

@SaCheckPermission("system:users:add")// 注解校验@Post@Mapping("/add")publicResponseResultadd(){// ...}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 17:33:02

python语言随机人物头像图片生成器程序代码

import random from PIL import Image, ImageDrawclass RandomAvatarGenerator:def __init__(self, avatar_size200):"""初始化头像生成器&#xff0c;默认生成200x200的头像"""self.size avatar_sizeself.center (avatar_size // 2, avatar_s…

作者头像 李华
网站建设 2026/4/22 2:37:55

基于 Python 的人脸+服装双重验证照片识别系统

从海量照片中精准找出特定人物的照片,结合人脸识别与服装颜色检测的双重验证方案。 背景 在活动、运动会等场景中,摄影师会拍摄大量照片。如何从成百上千张照片中快速找出某个特定人物的照片?单纯依靠人脸识别可能会有误匹配,本文介绍一种结合人脸识别和服装颜色检测的双重…

作者头像 李华
网站建设 2026/4/23 22:41:58

计算机毕业设计springboot牙医诊所管理系统的设计与实现 基于SpringBoot的口腔门诊综合管理平台的设计与实现 SpringBoot驱动的数字化牙科诊所运营系统开发实战

计算机毕业设计springboot牙医诊所管理系统的设计与实现m077bax2 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。当“看牙”从线下排队变成指尖预约&#xff0c;当消毒记录从纸质…

作者头像 李华
网站建设 2026/4/22 10:00:53

有什么好用的降AIGC疑似度工具,知网AI率90%!

2025年起&#xff0c;高校已明确要求毕业论文要检测AIGC率&#xff0c;AI率高于30%或40%就不能参加答辩&#xff0c;而部分学校、硕士论文更加严格&#xff0c;要求在20%以内。 这其中&#xff0c;大多数高校使用的AIGC检测系统是知网、万方、维普等主流查重系统&#xff0c;这…

作者头像 李华
网站建设 2026/4/23 12:45:51

推行无纸化审图,国产CAD助力企业降本增效与绿色办公

在许多企业&#xff0c;项目评审会依然依赖打印A0甚至A1的大幅图纸。这不仅消耗大量的纸张和打印成本&#xff0c;会后图纸的存储、管理也极为不便&#xff0c;更与绿色办公的理念相悖。纸质流程本身也存在效率低下、批注易丢失、追溯困难等问题。CAXA CAD 为全面实现“无纸化审…

作者头像 李华
网站建设 2026/4/22 20:51:21

智能逗狗神器方案开发,狗狗跳跳球MCU方案设计

狗狗跳跳球是一款集自动运动、声光互动、智能启停于一体的宠物玩具&#xff0c;通过随机、不可预测的运动模式吸引狗狗追逐&#xff0c;同时具备防卡死、低功耗等功能&#xff0c;提升人宠互动体验。本文讨论狗狗跳跳球MCU方案开发设计思路。智能逗狗神器狗狗跳跳球MCU方案兼顾…

作者头像 李华