Files
youlai-boot/sql/menu_device_sn.sql
TongTongStudio af2b9846f1 feat(device): 添加设备策略信息管理功能
新增设备策略信息表 sys_sn_device_policy 及对应实体、Mapper、Converter、VO、Req 模型,并在设备端、家属端、管理端分别提供策略查询、全量更新和单独开关设置接口。同时修正设备菜单按钮权限命名(add/edit → create/update),并调整删除设备与解绑接口的权限和返回值。
2026-08-27 11:48:45 +08:00

62 lines
3.8 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ----------------------------------------------------------------------------
-- SN管理 菜单 & 按钮权限初始化脚本(可重复执行 / 幂等)
--
-- 依赖
-- 1. 前端页面 vue3-element-admin-ttstd/src/views/devices/sn/index.vue
-- 2. 后端接口 com.youlai.boot.device.controller.DeviceController (/api/v1/device)
--
-- 说明
-- - 菜单本身(type=M)不携带权限字符串,权限必须来自按钮行(type=B, perm 非空)
-- - 权限字符串中含冒号,部分客户端会把 :xxx 当成绑定变量,故本脚本用 CONCAT 拼接
-- 且授权改用「菜单下所有按钮」子查询SQL 文本中避免出现 :token
-- - 权限每次请求实时查库,执行后刷新页面即可,无需重启
-- ----------------------------------------------------------------------------
-- 0. 定位「SN管理」菜单按前端组件路径唯一标识
SET @menu_id = (SELECT `id` FROM `sys_menu` WHERE `component` = 'devices/sn/index' LIMIT 1);
-- 若菜单不存在则创建(挂到「设备调试」目录下;如目录 id 不同请自行调整 parent_id
SET @parent_id = (SELECT `id` FROM `sys_menu` WHERE `name` = '设备调试' AND `parent_id` = 0 LIMIT 1);
INSERT INTO `sys_menu` (`parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`,
`perm`, `always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`,
`create_time`, `update_time`, `params`)
SELECT @parent_id, CONCAT('0,', @parent_id), 'SN管理', 'M', 'SnManagement', 'sn-management',
'devices/sn/index', NULL, NULL, 1, 1, 1, 'device', NULL, now(), now(), NULL
FROM DUAL
WHERE @parent_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `component` = 'devices/sn/index');
-- 重新取一次菜单 id可能刚创建
SET @menu_id = (SELECT `id` FROM `sys_menu` WHERE `component` = 'devices/sn/index' LIMIT 1);
-- 计算按钮的 tree_path = 菜单 tree_path + ',' + 菜单 id
SET @tree_path = (SELECT CONCAT(`tree_path`, ',', `id`) FROM `sys_menu` WHERE `id` = @menu_id);
-- 1. 清理旧命名按钮权限add/edit → create/update保证幂等可重跑
-- 旧的 sys:device:add / sys:device:edit 若存在则删除,避免与标准命名并存
DELETE FROM `sys_menu`
WHERE `perm` IN (CONCAT('sys', ':', 'device', ':', 'add'), CONCAT('sys', ':', 'device', ':', 'edit'))
AND `type` = 'B';
-- 2. 插入按钮权限(不存在才插入);权限字符串用 CONCAT 拼接,避免 :token 被客户端误判
-- 命名遵循系统标准(前端 buttonConfig 与后端代码生成器统一list / create / update / delete
INSERT INTO `sys_menu` (`parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`,
`perm`, `always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`,
`create_time`, `update_time`, `params`)
SELECT @menu_id, @tree_path, t.`name`, 'B', NULL, NULL, NULL,
t.`perm`, NULL, NULL, 1, t.`sort`, NULL, NULL, now(), now(), NULL
FROM (
SELECT '查询' AS `name`, CONCAT('sys', ':', 'device', ':', 'list') AS `perm`, 1 AS `sort` UNION ALL
SELECT '新增', CONCAT('sys', ':', 'device', ':', 'create'), 2 UNION ALL
SELECT '编辑', CONCAT('sys', ':', 'device', ':', 'update'), 3 UNION ALL
SELECT '删除', CONCAT('sys', ':', 'device', ':', 'delete'), 4
) t
WHERE @menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM `sys_menu` m WHERE m.`perm` = t.`perm`);
-- 3. 授权给 ADMIN 角色role_id = 2如实际角色 id 不同请修改)
-- 直接授权该菜单下的全部按钮,避免 SQL 文本中出现带冒号的权限字符串
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`)
SELECT 2, `id`
FROM `sys_menu`
WHERE `parent_id` = @menu_id AND `type` = 'B';