264e60392d
CI/CD Deploy (Admin) / 构建后端镜像并部署 (push) Successful in 1m7s
沿用已验证的自增版式: - parent_id 用子查询按 permission_code 定位「工具列表」,不硬编码 id - 菜单 id 由 LAST_INSERT_ID() 经 SET 变量传给授权语句 - 授权用 INSERT...SELECT 覆盖全部有效角色 - 清理语句用 JOIN 精确定位,不误删他人菜单 已实测执行并校验:菜单树与授权均正确,超级管理员无遗漏项。
64 lines
2.9 KiB
SQL
64 lines
2.9 KiB
SQL
-- ============================================================
|
|
-- 「工具列表」下新增「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`; |