角色数据隔离 + 策略路由
业务背景这个系统管的是工地上的塔机/升降机参与方有8 种角色角色枚举值roleId干什么的产权单位PROPERTY(1)1001塔机的房东设备归他安装单位INSTALL(2)1003负责把塔机装起来使用单位USE(4)1005工地上实际用塔机的监理单位SUPERVISE(8)1017盯着大家干活的检测单位TEST(16)1009检测塔机合不合格维保单位MAINTENANCE(32)1011负责日常保养维修总包单位TOTAL(64)1016工地总负责人终端单位TERMINAL(128)1015管物联网终端设备的核心矛盾同样点设备列表这个菜单产权单位看到的应该是我名下的设备安装单位看到的应该是我装过的设备使用单位看到的应该是我正在用的设备。数据必须隔离不能串。角色数据隔离 (Role-based Data Isolation)策略路由 (Strategy Routing)第一部分角色数据隔离它解决了什么问题如果8 种角色都用同一个设备列表接口但每种角色看到的设备范围完全不同。最笨的办法是写一个巨大的 SQL把所有权限条件都塞进去。但那样 SQL 会极其复杂、难维护、容易出 bug。怎么做的核心方法queryCraneList逻辑很直白1. 拿到当前用户的 roleId角色ID 2. 拿到当前用户的 organId机构ID 3. 根据 roleId 走不同的 if 分支 4. 每个分支调对应的 Mapper 方法都传 organId 进去比如安装单位roleId1003登录走selectInstallUsingCraneList(req, organId)SQL 里天然带了WHERE organ_id ?只查出这个安装单位装过的设备。使用单位登录走selectUseUsingCraneList查的是使用单位在用的设备。数据隔离靠的不是复杂的权限框架而是每个角色调自己的 SQLSQL 里自带 organId 过滤。简单粗暴但极其有效。还有一个细节在用/已用安装单位、使用单位、总包/监理这三种角色还要区分在用设备和已用设备历史设备通过req.getUsingState()参数控制。相当于每个角色内部还分两套查询。而终端单位不需要区分只查一个列表。总包/监理的特殊处理总包和监理共用一套查询方法selectTotalOrSuperviseUsingCraneList但额外传了roleId参数。因为总包和监理虽然看同样的设备但在 SQL 里的关联条件略有不同需要 roleId 来区分。第二部分策略路由applyMap 反射路由表它解决了什么问题系统有17 种业务申请安装告知、顶升申请、拆卸告知、使用登记、设备检测、终端绑定、设备停用、设备复工… 每种申请存在不同的数据库表里由不同的 Mapper 管理。setDataSource方法要干的活是拿到一批申请日志ApplyLog给每条日志补充这条数据来自哪个地市平台。笨办法是写 17 个 if-elseif(INSTALL.equals(type)){InformApplyapplyinformApplyMapper.selectById(applyId);platformIdapply.getPlatformId();}elseif(UP.equals(type)){UpApplyapplyupApplyMapper.selectById(applyId);platformIdapply.getPlatformId();}elseif(USE.equals(type)){UseApplyapplyuseApplyMapper.selectById(applyId);platformIdapply.getPlatformId();}// ... 再来 14 个这样写又臭又长每加一种申请类型就得改这个方法。怎么做的第一步启动时注册路由表PostConstruct initMap()在 Spring 启动时自动执行把 17 种申请类型注册到一个 Map 里applyMap.put(INSTALL,Triple.of(informApplyMapper,InformApply.class,platformId));applyMap.put(UP,Triple.of(upApplyMapper,UpApply.class,platformId));// ... 17 种每个 Triple 存了三样东西left用哪个 Mapper 查如informApplyMappermiddle查出来是什么类如InformApply.classright要读哪个字段如platformId第二步运行时查表 反射setDataSource遍历每条日志拿到applyType从 Map 里查到对应的 Triple然后1. 用 mapper.selectById(applyId) 查出申请记录 2. 用反射 clazz.getDeclaredField(platformId) 拿到字段 3. 用 field.get(apply) 读出 platformId 的值 4. 用 platformId 查平台名称设置到日志上核心思想把哪种类型用哪个 Mapper、哪个类、哪个字段这个映射关系预先注册好运行时通过查表 反射动态执行避免了硬编码的 if-else 链。两者的关联这两个设计其实是配合使用的角色数据隔离解决的是不同角色看不同设备列表策略路由解决的是不同申请类型用不同的查询方式一个按角色分发一个按申请类型分发思路一样——用枚举做 key用查表代替 if-else。区别是角色隔离走的是 if-else 分支因为分支少且每个分支逻辑差异大策略路由走的是 Map 反射因为分支多且每个分支逻辑结构相同只是参数不同。

相关新闻

免费解锁NVIDIA显卡隐藏性能:Profile Inspector终极配置指南

免费解锁NVIDIA显卡隐藏性能:Profile Inspector终极配置指南

免费解锁NVIDIA显卡隐藏性能:Profile Inspector终极配置指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否知道你的NVIDIA显卡还隐藏着200多项官方控制面板无法访问的高级设置&…

2026/8/6 19:46:29 阅读更多 →
coalecing

coalecing

Memory Coalescing(内存合并访问) 是 GPU 编程中针对 Global Memory(全局内存) 最基础且最重要的访存性能优化机制。 它的核心思想是:当一个 Warp(32 个线程)同时发起全局内存读写时&#xff0c…

2026/8/6 19:45:29 阅读更多 →
Dommel支持的数据库:从SQL Server到PostgreSQL全兼容方案

Dommel支持的数据库:从SQL Server到PostgreSQL全兼容方案

Dommel支持的数据库:从SQL Server到PostgreSQL全兼容方案 【免费下载链接】Dommel CRUD operations with Dapper made simple. 项目地址: https://gitcode.com/gh_mirrors/do/Dommel Dommel作为一款轻量级ORM工具,通过与Dapper的无缝集成&#xf…

2026/8/6 19:45:29 阅读更多 →

最新新闻

【AI产品经理】第三章 电商实战

【AI产品经理】第三章 电商实战

第三章 电商实战一、名称解释 1. 电子商务 (E-commerce) 通过互联网等电子手段进行的商品或服务的交易活动。按交易主体分为 B2C(企业到消费者)、B2B(企业到企业)、C2C(消费者到消费者)、O2O(线…

2026/8/6 20:32:46 阅读更多 →
MySQL索引失效原理与优化实践

MySQL索引失效原理与优化实践

1. 索引失效的本质:当优化器决定放弃索引 MySQL索引失效的根本原因在于查询优化器的成本计算机制。优化器会根据统计信息估算全表扫描和索引扫描的成本,当它认为全表扫描更高效时,就会放弃使用索引。这种"失效"实际上是优化器的主动…

2026/8/6 20:32:46 阅读更多 →
解决Linkage Mapper Barrier M插件错误01478的实用指南

解决Linkage Mapper Barrier M插件错误01478的实用指南

1. 问题背景与现象描述最近在使用Linkage Mapper工具套件中的Barrier Mapper插件进行生态障碍点分析时,遇到了一个令人困惑的错误提示:"error01478:20必须大于20"。这个报错信息看似自相矛盾,却实实在在地阻碍了分析流程…

2026/8/6 20:32:46 阅读更多 →
es6-shim与es5-shim搭配使用:构建完整的JavaScript兼容性方案

es6-shim与es5-shim搭配使用:构建完整的JavaScript兼容性方案

es6-shim与es5-shim搭配使用:构建完整的JavaScript兼容性方案 【免费下载链接】es6-shim ECMAScript 6 compatibility shims for legacy JS engines 项目地址: https://gitcode.com/gh_mirrors/es6/es6-shim 在现代Web开发中,确保JavaScript代码在…

2026/8/6 20:32:46 阅读更多 →
MySQL全量实战手册:从基础配置到高级优化

MySQL全量实战手册:从基础配置到高级优化

1. MySQL全量实战手册:为什么每个开发者都需要这份指南十年前我刚接触MySQL时,踩过的坑能写满三本笔记本。从最基本的连接超时到复杂的死锁问题,从简单的CRUD到百万级数据优化,这些经验最终凝结成了这份实战手册。这不是又一份官方…

2026/8/6 20:32:46 阅读更多 →
Flutter Debug 红屏、Release 灰屏:你的 release-only bug,只是异常被藏起来了

Flutter Debug 红屏、Release 灰屏:你的 release-only bug,只是异常被藏起来了

Flutter Debug 红屏、Release 灰屏:你的 release-only bug,只是异常被藏起来了 作者:FungLeo | 适用:Flutter | 涉及:ErrorWidget.builder、FlutterError.onError、PlatformDispatcher.onError、…

2026/8/6 20:31:46 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/5 21:00:14 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →