Przeglądaj źródła

fix: 权限体系完整对齐 — 清理充电遗留、统一前后端权限值、修复登录缓存Bug

- init.sql: 替换27条旧充电系统通用权限为63条洗车业务权限,严格对齐 @SaCheckPermission
- route.ts: stationStatMonth/statement(充电遗留)移除,equipment→washDevice, station→washStation, order→washOrder
- userInfo.ts: 修复 setUserInfos 重新登录时使用 Session 旧缓存导致新权限失效
- v6: INSERT→INSERT IGNORE 兼容新init.sql已含权限
- 新增 v9_permission_reset.sql 用于已有库权限完整重置

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
skyline 1 dzień temu
rodzic
commit
ac15595bb4

+ 5 - 5
admin-web/src/router/route.ts

@@ -128,7 +128,7 @@ export const adminRoutes: Array<RouteRecordRaw> = [
                     isAffix: false,
                     isIframe: false,
                     icon: 'ele-MapLocation',
-                    perm: "equipment.list,station.list,stationStatMonth.list,statement.list,faultSubscriber.list,faultRecord.list",
+                    perm: "washDevice.list,washStation.list,faultSubscriber.list,faultRecord.list",
                 },
                 children: [
                     {
@@ -142,7 +142,7 @@ export const adminRoutes: Array<RouteRecordRaw> = [
                             isKeepAlive: true,
                             isAffix: false,
                             isIframe: false,
-                            perm: "station.list",
+                            perm: "washStation.list",
                             icon: 'ele-OfficeBuilding',
                         },
                     },
@@ -157,7 +157,7 @@ export const adminRoutes: Array<RouteRecordRaw> = [
                             isKeepAlive: true,
                             isAffix: false,
                             isIframe: false,
-                            perm: "equipment.list",
+                            perm: "washDevice.list",
                             icon: 'ele-Cpu',
                         },
                     },
@@ -172,7 +172,7 @@ export const adminRoutes: Array<RouteRecordRaw> = [
                             isKeepAlive: true,
                             isAffix: false,
                             isIframe: false,
-                            perm: "equipment.list",
+                            perm: "washDevice.list",
                             icon: 'ele-Wallet',
                         },
                     },
@@ -257,7 +257,7 @@ export const adminRoutes: Array<RouteRecordRaw> = [
                     isAffix: false,
                     isIframe: false,
                     icon: 'ele-Document',
-                    perm: "order.list",
+                    perm: "washOrder.list",
                 }
             },
 

+ 3 - 8
admin-web/src/stores/userInfo.ts

@@ -20,14 +20,9 @@ export const useUserInfo = defineStore('userInfo', {
 	}),
 	actions: {
 		async setUserInfos(userInfos:any) {
-			// 存储用户信息到浏览器缓存
-			if (Session.get('userInfo')) {
-				this.userInfos = Session.get('userInfo');
-			} else {
-				Session.set('userInfo',userInfos)
-				// const userInfos: any = await this.getApiUserInfo();
-				this.userInfos = userInfos;
-			}
+			// 存储用户信息到浏览器缓存,始终使用最新数据
+			Session.set('userInfo', userInfos);
+			this.userInfos = userInfos;
 		},
 		// 模拟接口数据
 		// https://gitee.com/lyt-top/vue-next-admin/issues/I5F1HP

+ 101 - 33
car-wash-entity/src/main/resources/sql/init.sql

@@ -274,38 +274,103 @@ INSERT INTO `t_role` (`id`, `company_id`, `role_name`, `role_desc`) VALUES
 (4, 1, '财务人员', '拥有财务相关权限');
 
 -- ----------------------------
--- 初始化权限
+-- 初始化权限(与后端 @SaCheckPermission 严格一一对应)
 -- ----------------------------
 INSERT INTO `t_permission` (`id`, `company_id`, `name`, `value`, `pid`, `weight`) VALUES
--- 系统管理
-(1, NULL, '系统管理', 'system', 0, 100),
-(2, NULL, '用户管理', 'user', 1, 10),
-(3, NULL, '用户列表', 'user.list', 2, 1),
-(4, NULL, '用户新增', 'user.add', 2, 2),
-(5, NULL, '用户编辑', 'user.edit', 2, 3),
-(6, NULL, '用户删除', 'user.delete', 2, 4),
-(7, NULL, '角色管理', 'role', 1, 20),
-(8, NULL, '角色列表', 'role.list', 7, 1),
-(9, NULL, '角色新增', 'role.add', 7, 2),
-(10, NULL, '角色编辑', 'role.edit', 7, 3),
-(11, NULL, '角色删除', 'role.delete', 7, 4),
-(12, NULL, '字典管理', 'dict', 1, 30),
-(13, NULL, '字典列表', 'dict.list', 12, 1),
-(14, NULL, '字典新增', 'dict.add', 12, 2),
-(15, NULL, '字典编辑', 'dict.edit', 12, 3),
-(16, NULL, '字典删除', 'dict.delete', 12, 4),
-(17, NULL, '日志管理', 'log', 1, 40),
-(18, NULL, '日志列表', 'log.list', 17, 1),
-(19, NULL, '公告管理', 'notice', 1, 50),
-(20, NULL, '公告列表', 'notice.list', 19, 1),
-(21, NULL, '公告新增', 'notice.add', 19, 2),
-(22, NULL, '公告编辑', 'notice.edit', 19, 3),
-(23, NULL, '公告删除', 'notice.delete', 19, 4),
--- 消息管理
-(24, NULL, '消息管理', 'message', 0, 90),
-(25, NULL, '消息列表', 'message.list', 24, 1),
-(26, NULL, '发送消息', 'message.send', 24, 2),
-(27, NULL, '消息删除', 'message.delete', 24, 3);
+-- ====== 站点管理 ======
+(1, NULL, '站点管理', 'washStation', 0, 10),
+(2, NULL, '站点列表', 'washStation.list', 1, 1),
+(3, NULL, '新增站点', 'washStation.add', 1, 2),
+(4, NULL, '修改站点', 'washStation.modify', 1, 3),
+(5, NULL, '删除站点', 'washStation.remove', 1, 4),
+
+-- ====== 设备管理 ======
+(6, NULL, '设备管理', 'washDevice', 0, 20),
+(7, NULL, '设备列表', 'washDevice.list', 6, 1),
+(8, NULL, '新增设备', 'washDevice.add', 6, 2),
+(9, NULL, '修改设备', 'washDevice.modify', 6, 3),
+(10, NULL, '删除设备', 'washDevice.remove', 6, 4),
+
+-- ====== 订单管理 ======
+(11, NULL, '订单管理', 'washOrder', 0, 30),
+(12, NULL, '订单列表', 'washOrder.list', 11, 1),
+(13, NULL, '修改订单', 'washOrder.modify', 11, 2),
+
+-- ====== 用户管理(运维用户) ======
+(14, NULL, '用户管理', 'user', 0, 40),
+(15, NULL, '用户列表', 'user.list', 14, 1),
+(16, NULL, '新增用户', 'user.add', 14, 2),
+(17, NULL, '修改用户', 'user.modify', 14, 3),
+
+-- ====== 账户管理(C端用户) ======
+(18, NULL, '账户管理', 'account', 0, 50),
+(19, NULL, '账户列表', 'account.list', 18, 1),
+
+-- ====== 投资人管理 ======
+(20, NULL, '投资人管理', 'investor', 0, 55),
+(21, NULL, '新增投资人', 'investor.add', 20, 1),
+
+-- ====== 角色管理 ======
+(22, NULL, '角色管理', 'role', 0, 60),
+(23, NULL, '角色列表', 'role.list', 22, 1),
+(24, NULL, '新增角色', 'role.add', 22, 2),
+(25, NULL, '修改角色', 'role.modify', 22, 3),
+(26, NULL, '删除角色', 'role.delete', 22, 4),
+
+-- ====== 字典管理 ======
+(27, NULL, '字典管理', 'dict', 0, 70),
+(28, NULL, '字典列表', 'dict.list', 27, 1),
+(29, NULL, '新增字典', 'dict.add', 27, 2),
+(30, NULL, '修改字典', 'dict.modify', 27, 3),
+
+-- ====== 充值配置 ======
+(31, NULL, '充值配置', 'rechargeConfig', 0, 80),
+(32, NULL, '配置列表', 'rechargeConfig.list', 31, 1),
+(33, NULL, '新增配置', 'rechargeConfig.add', 31, 2),
+(34, NULL, '修改配置', 'rechargeConfig.modify', 31, 3),
+(35, NULL, '删除配置', 'rechargeConfig.remove', 31, 4),
+
+-- ====== 线下充值 ======
+(36, NULL, '线下充值', 'offlineRecharge', 0, 90),
+
+-- ====== 优惠活动 ======
+(37, NULL, '优惠活动', 'promotion', 0, 100),
+(38, NULL, '活动列表', 'promotion.list', 37, 1),
+(39, NULL, '新增活动', 'promotion.add', 37, 2),
+(40, NULL, '修改活动', 'promotion.modify', 37, 3),
+(41, NULL, '删除活动', 'promotion.remove', 37, 4),
+
+-- ====== 故障管理 ======
+(42, NULL, '故障管理', 'faultSubscriber', 0, 110),
+(43, NULL, '订阅列表', 'faultSubscriber.list', 42, 1),
+(44, NULL, '解绑订阅', 'faultSubscriber.delete', 42, 2),
+(45, NULL, '生成二维码', 'faultSubscriber.qrcode', 42, 3),
+(46, NULL, '故障记录', 'faultRecord.list', 42, 4),
+
+-- ====== FAQ 管理 ======
+(47, NULL, 'FAQ管理', 'faq', 0, 120),
+(48, NULL, 'FAQ列表', 'faq.list', 47, 1),
+(49, NULL, '新增FAQ', 'faq.add', 47, 2),
+(50, NULL, '修改FAQ', 'faq.modify', 47, 3),
+(51, NULL, '删除FAQ', 'faq.remove', 47, 4),
+
+-- ====== 反馈管理 ======
+(52, NULL, '反馈管理', 'feedback', 0, 130),
+(53, NULL, '反馈列表', 'feedback.list', 52, 1),
+(54, NULL, '新增反馈', 'feedback.add', 52, 2),
+(55, NULL, '修改反馈', 'feedback.modify', 52, 3),
+(56, NULL, '删除反馈', 'feedback.remove', 52, 4),
+
+-- ====== 设备配置 ======
+(57, NULL, '设备配置', 'deviceConfig', 0, 140),
+(58, NULL, '新增配置', 'deviceConfig.add', 57, 1),
+(59, NULL, '修改配置', 'deviceConfig.modify', 57, 2),
+
+-- ====== 设备关联 ======
+(60, NULL, '设备关联', 'deviceRelation', 0, 150),
+(61, NULL, '关联列表', 'deviceRelation.list', 60, 1),
+(62, NULL, '新增关联', 'deviceRelation.add', 60, 2),
+(63, NULL, '删除关联', 'deviceRelation.remove', 60, 3);
 
 -- ----------------------------
 -- 初始化用户角色关联
@@ -315,10 +380,13 @@ INSERT INTO `t_admin_user_role` (`admin_user_id`, `role_id`) VALUES
 (2, 2);
 
 -- ----------------------------
--- 初始化角色权限关联(超级管理员拥有所有权限)
+-- 初始化超级管理员角色权限(permissions 字段为管道分隔字符串)
+-- 注意:63 个权限值总长超过 GROUP_CONCAT 默认 1024,需先调大
 -- ----------------------------
-INSERT INTO `t_role_permission` (`role_id`, `permission_id`)
-SELECT 1, id FROM `t_permission`;
+SET SESSION group_concat_max_len = 10000;
+UPDATE `t_role` SET `permissions` = (
+    SELECT GROUP_CONCAT(`value` SEPARATOR '|') FROM `t_permission` ORDER BY `id`
+) WHERE `id` = 1;
 
 -- ----------------------------
 -- 初始化数据字典

+ 1 - 1
car-wash-entity/src/main/resources/sql/v6_fault_notification.sql

@@ -86,7 +86,7 @@ VALUES (
 -- ----------------------------
 -- 5. 权限:故障订阅管理
 -- ----------------------------
-INSERT INTO `t_permission` (`id`, `company_id`, `name`, `value`, `pid`, `weight`) VALUES
+INSERT IGNORE INTO `t_permission` (`id`, `company_id`, `name`, `value`, `pid`, `weight`) VALUES
 (NULL, NULL, '故障订阅管理', 'faultSubscriber', 0, 60),
 (NULL, NULL, '订阅列表', 'faultSubscriber.list', (SELECT id FROM (SELECT id FROM `t_permission` WHERE `value` = 'faultSubscriber') AS t), 1),
 (NULL, NULL, '解绑订阅', 'faultSubscriber.delete', (SELECT id FROM (SELECT id FROM `t_permission` WHERE `value` = 'faultSubscriber') AS t), 2),

+ 129 - 0
car-wash-entity/src/main/resources/sql/v9_permission_reset.sql

@@ -0,0 +1,129 @@
+-- ====================================================
+-- v9: 权限数据完整重置
+-- 清空旧权限 + 插入新权限 + 重新授权超级管理员
+-- 权限存储在 t_role.permissions 字段(管道分隔字符串)
+-- 执行前提:确认当前数据库中的旧权限关联可以清除
+-- ====================================================
+
+-- ----------------------------
+-- 1. 清理旧权限数据
+-- ----------------------------
+DELETE FROM `t_permission`;
+
+-- 重置自增 ID,确保新权限从 1 开始
+ALTER TABLE `t_permission` AUTO_INCREMENT = 1;
+
+-- ----------------------------
+-- 2. 插入完整权限(与后端 @SaCheckPermission 严格一一对应)
+-- ----------------------------
+INSERT INTO `t_permission` (`id`, `company_id`, `name`, `value`, `pid`, `weight`) VALUES
+-- ====== 站点管理 ======
+(1, NULL, '站点管理', 'washStation', 0, 10),
+(2, NULL, '站点列表', 'washStation.list', 1, 1),
+(3, NULL, '新增站点', 'washStation.add', 1, 2),
+(4, NULL, '修改站点', 'washStation.modify', 1, 3),
+(5, NULL, '删除站点', 'washStation.remove', 1, 4),
+
+-- ====== 设备管理 ======
+(6, NULL, '设备管理', 'washDevice', 0, 20),
+(7, NULL, '设备列表', 'washDevice.list', 6, 1),
+(8, NULL, '新增设备', 'washDevice.add', 6, 2),
+(9, NULL, '修改设备', 'washDevice.modify', 6, 3),
+(10, NULL, '删除设备', 'washDevice.remove', 6, 4),
+
+-- ====== 订单管理 ======
+(11, NULL, '订单管理', 'washOrder', 0, 30),
+(12, NULL, '订单列表', 'washOrder.list', 11, 1),
+(13, NULL, '修改订单', 'washOrder.modify', 11, 2),
+
+-- ====== 用户管理(运维用户) ======
+(14, NULL, '用户管理', 'user', 0, 40),
+(15, NULL, '用户列表', 'user.list', 14, 1),
+(16, NULL, '新增用户', 'user.add', 14, 2),
+(17, NULL, '修改用户', 'user.modify', 14, 3),
+
+-- ====== 账户管理(C端用户) ======
+(18, NULL, '账户管理', 'account', 0, 50),
+(19, NULL, '账户列表', 'account.list', 18, 1),
+
+-- ====== 投资人管理 ======
+(20, NULL, '投资人管理', 'investor', 0, 55),
+(21, NULL, '新增投资人', 'investor.add', 20, 1),
+
+-- ====== 角色管理 ======
+(22, NULL, '角色管理', 'role', 0, 60),
+(23, NULL, '角色列表', 'role.list', 22, 1),
+(24, NULL, '新增角色', 'role.add', 22, 2),
+(25, NULL, '修改角色', 'role.modify', 22, 3),
+(26, NULL, '删除角色', 'role.delete', 22, 4),
+
+-- ====== 字典管理 ======
+(27, NULL, '字典管理', 'dict', 0, 70),
+(28, NULL, '字典列表', 'dict.list', 27, 1),
+(29, NULL, '新增字典', 'dict.add', 27, 2),
+(30, NULL, '修改字典', 'dict.modify', 27, 3),
+
+-- ====== 充值配置 ======
+(31, NULL, '充值配置', 'rechargeConfig', 0, 80),
+(32, NULL, '配置列表', 'rechargeConfig.list', 31, 1),
+(33, NULL, '新增配置', 'rechargeConfig.add', 31, 2),
+(34, NULL, '修改配置', 'rechargeConfig.modify', 31, 3),
+(35, NULL, '删除配置', 'rechargeConfig.remove', 31, 4),
+
+-- ====== 线下充值 ======
+(36, NULL, '线下充值', 'offlineRecharge', 0, 90),
+
+-- ====== 优惠活动 ======
+(37, NULL, '优惠活动', 'promotion', 0, 100),
+(38, NULL, '活动列表', 'promotion.list', 37, 1),
+(39, NULL, '新增活动', 'promotion.add', 37, 2),
+(40, NULL, '修改活动', 'promotion.modify', 37, 3),
+(41, NULL, '删除活动', 'promotion.remove', 37, 4),
+
+-- ====== 故障管理 ======
+(42, NULL, '故障管理', 'faultSubscriber', 0, 110),
+(43, NULL, '订阅列表', 'faultSubscriber.list', 42, 1),
+(44, NULL, '解绑订阅', 'faultSubscriber.delete', 42, 2),
+(45, NULL, '生成二维码', 'faultSubscriber.qrcode', 42, 3),
+(46, NULL, '故障记录', 'faultRecord.list', 42, 4),
+
+-- ====== FAQ 管理 ======
+(47, NULL, 'FAQ管理', 'faq', 0, 120),
+(48, NULL, 'FAQ列表', 'faq.list', 47, 1),
+(49, NULL, '新增FAQ', 'faq.add', 47, 2),
+(50, NULL, '修改FAQ', 'faq.modify', 47, 3),
+(51, NULL, '删除FAQ', 'faq.remove', 47, 4),
+
+-- ====== 反馈管理 ======
+(52, NULL, '反馈管理', 'feedback', 0, 130),
+(53, NULL, '反馈列表', 'feedback.list', 52, 1),
+(54, NULL, '新增反馈', 'feedback.add', 52, 2),
+(55, NULL, '修改反馈', 'feedback.modify', 52, 3),
+(56, NULL, '删除反馈', 'feedback.remove', 52, 4),
+
+-- ====== 设备配置 ======
+(57, NULL, '设备配置', 'deviceConfig', 0, 140),
+(58, NULL, '新增配置', 'deviceConfig.add', 57, 1),
+(59, NULL, '修改配置', 'deviceConfig.modify', 57, 2),
+
+-- ====== 设备关联 ======
+(60, NULL, '设备关联', 'deviceRelation', 0, 150),
+(61, NULL, '关联列表', 'deviceRelation.list', 60, 1),
+(62, NULL, '新增关联', 'deviceRelation.add', 60, 2),
+(63, NULL, '删除关联', 'deviceRelation.remove', 60, 3);
+
+-- ----------------------------
+-- 3. 将全部权限写入超级管理员角色(role_id = 1)
+--    permissions 字段为管道分隔的权限值字符串
+--    注意:63 个权限值总长超过 GROUP_CONCAT 默认 1024,需先调大
+-- ----------------------------
+SET SESSION group_concat_max_len = 10000;
+UPDATE `t_role` SET `permissions` = (
+    SELECT GROUP_CONCAT(`value` SEPARATOR '|') FROM `t_permission` ORDER BY `id`
+) WHERE `id` = 1;
+
+-- ====================================================
+-- 验证
+-- SELECT COUNT(*) AS perm_count FROM t_permission;          -- 应为 63
+-- SELECT permissions FROM t_role WHERE id = 1;              -- 应为63个值以|分隔
+-- ====================================================