沿用已验证的自增版式: - parent_id 用子查询按 permission_code 定位「工具列表」,不硬编码 id - 菜单 id 由 LAST_INSERT_ID() 经 SET 变量传给授权语句 - 授权用 INSERT...SELECT 覆盖全部有效角色 - 清理语句用 JOIN 精确定位,不误删他人菜单 已实测执行并校验:菜单树与授权均正确,超级管理员无遗漏项。
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
-- ============================================================
|
||||
-- 「工具列表」下新增「JSON 格式化」菜单
|
||||
--
|
||||
-- 菜单由 t_sys_permission 表驱动,前端 formatMenuList() 会把 component
|
||||
-- 拼成 import('@/view' + component + '.vue'),因此 component 必须带前导斜杠,
|
||||
-- 且要与磁盘文件 src/view/tools/json-format.vue 对应
|
||||
--
|
||||
-- 幂等:可重复执行,已存在则先清理再插入
|
||||
-- 执行库:freedom_db
|
||||
--
|
||||
-- 注意:id 由数据库自增分配,父菜单通过 permission_code 子查询定位,
|
||||
-- 两者都不硬编码——避免与 t_sys_role_permission 的独立自增序列撞主键。
|
||||
-- ============================================================
|
||||
|
||||
-- ---------- 1. 清理历史遗留 ----------
|
||||
DELETE rp
|
||||
FROM `t_sys_role_permission` rp
|
||||
JOIN `t_sys_permission` p ON p.id = rp.permission_id
|
||||
WHERE p.permission_code = 'tools:json-format';
|
||||
|
||||
DELETE FROM `t_sys_permission` WHERE `permission_code` = 'tools:json-format';
|
||||
|
||||
-- ---------- 2. 插入子菜单「JSON 格式化」 ----------
|
||||
-- parent_id 用子查询取「工具列表」的 id,不写死数字
|
||||
-- sort=2 排在「文本比对」(sort=1) 之后
|
||||
-- icon md-brush 已从线上 CSS 校验存在
|
||||
INSERT INTO `t_sys_permission`
|
||||
(`parent_id`, `permission_code`, `permission_name`, `permission_desc`, `level`,
|
||||
`icon`, `url`, `component`, `sort`, `create_by`, `create_date`, `del_flag`)
|
||||
SELECT p.`id`, 'tools:json-format', 'JSON 格式化',
|
||||
'JSON 美化、压缩与语法错误定位,支持超长整数原样保留',
|
||||
2, 'md-brush', '/tools/json-format', '/tools/json-format',
|
||||
2, 'admin', NOW(), 0
|
||||
FROM `t_sys_permission` p
|
||||
WHERE p.permission_code = 'tools';
|
||||
|
||||
-- ---------- 3. 授权给全部有效角色 ----------
|
||||
-- 菜单 id 由上一条语句的插入值取得
|
||||
SET @json_menu_id = (
|
||||
SELECT `id` FROM `t_sys_permission` WHERE `permission_code` = 'tools:json-format' LIMIT 1
|
||||
);
|
||||
|
||||
INSERT INTO `t_sys_role_permission` (`role_id`, `permission_id`, `create_by`, `create_date`)
|
||||
SELECT r.`id`, @json_menu_id, 'admin', NOW()
|
||||
FROM `t_sys_role` r
|
||||
WHERE r.`del_flag` = 0
|
||||
AND @json_menu_id IS NOT NULL;
|
||||
|
||||
-- ---------- 4. 校验 ----------
|
||||
-- 预期 2 行:工具列表 + 文本比对 + JSON 格式化(level=2 的两条子菜单)
|
||||
SELECT p.`id`, p.`parent_id`, p.`permission_code`, p.`permission_name`,
|
||||
p.`level`, p.`icon`, p.`url`, p.`component`, p.`sort`
|
||||
FROM `t_sys_permission` p
|
||||
WHERE p.permission_code = 'tools'
|
||||
OR p.parent_id IN (SELECT `id` FROM (SELECT `id` FROM `t_sys_permission` WHERE `permission_code` = 'tools') x)
|
||||
ORDER BY p.level, p.sort;
|
||||
|
||||
-- 预期:每个有效角色 1 条新关联
|
||||
SELECT rp.`id`, rp.`role_id`, r.`role_name`, rp.`permission_id`, p.`permission_name`
|
||||
FROM `t_sys_role_permission` rp
|
||||
JOIN `t_sys_role` r ON r.`id` = rp.`role_id`
|
||||
JOIN `t_sys_permission` p ON p.`id` = rp.`permission_id`
|
||||
WHERE p.permission_code = 'tools:json-format'
|
||||
ORDER BY rp.`role_id`;
|
||||
Reference in New Issue
Block a user