pms-front-react/scripts/sql/20260316_permission_button_...

257 lines
9.8 KiB
SQL

-- 权限按钮对账与补齐脚本
-- 用途:
-- 1. 根据前端当前实际使用到的权限码,对 sys_menu 中的按钮菜单做补齐
-- 2. 仅插入缺失按钮,不修改已有按钮,不重复插入
-- 3. 执行前会先输出“未找到父页面菜单”的按钮清单,便于先补页面再补按钮
--
-- 说明:
-- 1. 当前环境无法直接连库校验,这份脚本基于前端代码中的权限使用点生成
-- 2. 父页面使用 sys_menu.path 定位,个别页面补充 component 模糊匹配兜底
-- 3. 同一权限码如果在多个页面中复用,会按页面分别补按钮节点
START TRANSACTION;
DROP TEMPORARY TABLE IF EXISTS tmp_permission_button_specs;
CREATE TEMPORARY TABLE tmp_permission_button_specs (
parent_path VARCHAR(128) NOT NULL,
parent_component_like VARCHAR(255) NULL,
menu_name VARCHAR(128) NOT NULL,
perms VARCHAR(128) NOT NULL,
order_num INT NOT NULL DEFAULT 1,
remark VARCHAR(255) NULL
);
INSERT INTO tmp_permission_button_specs (parent_path, parent_component_like, menu_name, perms, order_num, remark) VALUES
-- 工作日志
('index', '%worklog%', '新增日志', 'business:work:hour:add', 1, 'WorkLogPage 添加日志'),
('index', '%worklog%', '编辑日志', 'business:work:hour:edit', 2, 'WorkLogPage 编辑/确认'),
('index', '%worklog%', '更新日志', 'business:work:hour:update', 3, 'WorkLogPage 兼容旧权限码'),
('index', '%worklog%', '删除日志', 'business:work:hour:remove', 4, 'WorkLogPage 删除/取消'),
-- 项目管理
('project', '%project/list%', '新增项目', 'business:project:add', 1, 'ProjectPage'),
('project', '%project/list%', '编辑项目', 'business:project:edit', 2, 'ProjectPage/ProjectDetailPage'),
('project', '%project/list%', '删除项目', 'business:project:remove', 3, 'ProjectPage'),
('project', '%project/list%', '查看需求', 'project:demand:list', 4, 'ProjectPage'),
-- 需求管理
('demandManage', NULL, '新增需求', 'project:demand:add', 1, 'DemandManagePage'),
('demandManage', NULL, '编辑需求', 'project:demand:edit', 2, 'DemandManagePage'),
('demandManage', NULL, '删除需求', 'project:demand:remove', 3, 'DemandManagePage'),
('demandManage', NULL, '新增版本', 'project:version:add', 4, 'DemandManagePage'),
('demandManage', NULL, '编辑版本', 'project:version:edit', 5, 'DemandManagePage'),
('demandManage', NULL, '删除版本', 'project:version:remove', 6, 'DemandManagePage'),
-- 任务监控
('job', NULL, '新增任务', 'monitor:job:add', 1, 'JobMonitorPage'),
('job', NULL, '编辑任务', 'monitor:job:edit', 2, 'JobMonitorPage'),
('job', NULL, '删除任务', 'monitor:job:remove', 3, 'JobMonitorPage'),
('job', NULL, '导出任务', 'monitor:job:export', 4, 'JobMonitorPage'),
('job', NULL, '查询任务', 'monitor:job:query', 5, 'JobMonitorPage'),
('job', NULL, '状态修改', 'monitor:job:changeStatus', 6, 'JobMonitorPage'),
-- 缓存列表
('cacheList', NULL, '清理缓存', 'monitor:cache:clear', 1, 'CacheListPage'),
-- 在线用户
('online', NULL, '强退用户', 'monitor:online:forceLogout', 1, 'OnlineUserPage'),
-- 登录日志
('logininfor', NULL, '删除日志', 'monitor:logininfor:remove', 1, 'LoginLogPage'),
('logininfor', NULL, '清空日志', 'monitor:logininfor:clean', 2, 'LoginLogPage'),
('logininfor', NULL, '账户解锁', 'monitor:logininfor:unlock', 3, 'LoginLogPage'),
('logininfor', NULL, '导出日志', 'monitor:logininfor:export', 4, 'LoginLogPage'),
-- 操作日志
('operlog', NULL, '删除日志', 'monitor:operlog:remove', 1, 'OperationLogPage'),
('operlog', NULL, '清空日志', 'monitor:operlog:clean', 2, 'OperationLogPage'),
('operlog', NULL, '导出日志', 'monitor:operlog:export', 3, 'OperationLogPage'),
-- 用户管理
('user', NULL, '新增用户', 'system:user:add', 1, 'UserPage'),
('user', NULL, '修改用户', 'system:user:edit', 2, 'UserPage'),
('user', NULL, '删除用户', 'system:user:remove', 3, 'UserPage'),
('user', NULL, '重置密码', 'system:user:resetPwd', 4, 'UserPage'),
-- 角色管理
('role', NULL, '新增角色', 'system:role:add', 1, 'RolePage'),
('role', NULL, '修改角色', 'system:role:edit', 2, 'RolePage'),
('role', NULL, '删除角色', 'system:role:remove', 3, 'RolePage'),
('role', NULL, '导出角色', 'system:role:export', 4, 'RolePage'),
('role', NULL, '数据权限', 'system:role:dataScope', 5, 'RolePage'),
('role', NULL, '分配用户', 'system:role:authUser', 6, 'RolePage'),
-- 菜单管理
('menu', NULL, '新增菜单', 'system:menu:add', 1, 'MenuPage'),
('menu', NULL, '修改菜单', 'system:menu:edit', 2, 'MenuPage'),
('menu', NULL, '删除菜单', 'system:menu:remove', 3, 'MenuPage'),
-- 部门管理
('dept', NULL, '新增部门', 'system:dept:add', 1, 'DeptPage'),
('dept', NULL, '修改部门', 'system:dept:edit', 2, 'DeptPage'),
('dept', NULL, '删除部门', 'system:dept:remove', 3, 'DeptPage'),
-- 字典管理
('dict', NULL, '新增字典', 'system:dict:add', 1, 'DictPage'),
('dict', NULL, '修改字典', 'system:dict:edit', 2, 'DictPage'),
('dict', NULL, '删除字典', 'system:dict:remove', 3, 'DictPage'),
('dict', NULL, '导出字典', 'system:dict:export', 4, 'DictPage'),
('dict', NULL, '刷新缓存', 'system:dict:refreshCache', 5, 'DictPage'),
-- 参数配置
('config', NULL, '新增参数', 'system:config:add', 1, 'ConfigPage'),
('config', NULL, '修改参数', 'system:config:edit', 2, 'ConfigPage'),
('config', NULL, '删除参数', 'system:config:remove', 3, 'ConfigPage'),
('config', NULL, '导出参数', 'system:config:export', 4, 'ConfigPage'),
('config', NULL, '刷新缓存', 'system:config:refreshCache', 5, 'ConfigPage'),
-- 绩效任务设置
('taskSet', NULL, '新增任务', 'task:add', 1, 'TaskSetPage'),
('taskSet', NULL, '创建任务', 'task:create', 2, 'TaskSetPage 兼容旧权限码'),
('taskSet', NULL, '编辑任务', 'task:edit', 3, 'TaskSetPage'),
('taskSet', NULL, '更新任务', 'task:update', 4, 'TaskSetPage 兼容旧权限码'),
('taskSet', NULL, '删除任务', 'task:remove', 5, 'TaskSetPage'),
('taskSet', NULL, '删除任务兼容', 'task:delete', 6, 'TaskSetPage 兼容旧权限码'),
('taskSet', NULL, '指标配置', 'task:config', 7, 'TaskSetPage'),
('taskSet', NULL, '设置指标', 'task:set', 8, 'TaskSetPage 兼容旧权限码'),
-- 绩效看板
('taskModule', NULL, '删除模板', 'examine:template:remove', 1, 'AppraisalDashboardPage'),
('taskModule', NULL, '删除模板兼容', 'examine:template:delete', 2, 'AppraisalDashboardPage 兼容旧权限码'),
-- 绩效打分相关页面
('manager', NULL, '新增评分', 'examine:detail:add', 1, 'ManagerPage'),
('manager', NULL, '编辑评分', 'examine:detail:edit', 2, 'ManagerPage'),
('manager', NULL, '提交评分', 'examine:detail:submit', 3, 'ManagerPage'),
('managerUser', NULL, '新增评分', 'examine:detail:add', 1, 'ManagerUserPage'),
('managerUser', NULL, '编辑评分', 'examine:detail:edit', 2, 'ManagerUserPage'),
('managerUser', NULL, '提交评分', 'examine:detail:submit', 3, 'ManagerUserPage'),
('normalWorker', NULL, '新增评分', 'examine:detail:add', 1, 'NormalWorkerPage'),
('normalWorker', NULL, '编辑评分', 'examine:detail:edit', 2, 'NormalWorkerPage'),
('normalWorker', NULL, '提交评分', 'examine:detail:submit', 3, 'NormalWorkerPage'),
('detail', NULL, '新增评分', 'examine:detail:add', 1, 'AppraisalDetailPage'),
('detail', NULL, '编辑评分', 'examine:detail:edit', 2, 'AppraisalDetailPage'),
('detail', NULL, '提交评分', 'examine:detail:submit', 3, 'AppraisalDetailPage');
-- 先看哪些按钮找不到父页面
SELECT
s.parent_path,
s.menu_name,
s.perms,
s.remark
FROM tmp_permission_button_specs s
WHERE (
SELECT m.menu_id
FROM sys_menu m
WHERE m.menu_type IN ('M', 'C')
AND (
m.path = s.parent_path
OR (s.parent_component_like IS NOT NULL AND s.parent_component_like <> '' AND m.component LIKE s.parent_component_like)
)
ORDER BY
CASE WHEN m.path = s.parent_path THEN 0 ELSE 1 END,
m.menu_id
LIMIT 1
) IS NULL
ORDER BY s.parent_path, s.order_num;
-- 补齐缺失按钮
INSERT INTO sys_menu (
menu_name,
parent_id,
order_num,
path,
component,
query,
is_frame,
is_cache,
menu_type,
visible,
status,
perms,
icon,
create_by,
create_time,
remark
)
SELECT
s.menu_name,
(
SELECT m.menu_id
FROM sys_menu m
WHERE m.menu_type IN ('M', 'C')
AND (
m.path = s.parent_path
OR (s.parent_component_like IS NOT NULL AND s.parent_component_like <> '' AND m.component LIKE s.parent_component_like)
)
ORDER BY
CASE WHEN m.path = s.parent_path THEN 0 ELSE 1 END,
m.menu_id
LIMIT 1
) AS parent_id,
s.order_num,
'#',
'',
'',
'1',
'0',
'F',
'0',
'0',
s.perms,
'#',
'codex',
NOW(),
s.remark
FROM tmp_permission_button_specs s
WHERE (
SELECT m.menu_id
FROM sys_menu m
WHERE m.menu_type IN ('M', 'C')
AND (
m.path = s.parent_path
OR (s.parent_component_like IS NOT NULL AND s.parent_component_like <> '' AND m.component LIKE s.parent_component_like)
)
ORDER BY
CASE WHEN m.path = s.parent_path THEN 0 ELSE 1 END,
m.menu_id
LIMIT 1
) IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM sys_menu f
WHERE f.menu_type = 'F'
AND f.perms = s.perms
AND f.parent_id = (
SELECT m.menu_id
FROM sys_menu m
WHERE m.menu_type IN ('M', 'C')
AND (
m.path = s.parent_path
OR (s.parent_component_like IS NOT NULL AND s.parent_component_like <> '' AND m.component LIKE s.parent_component_like)
)
ORDER BY
CASE WHEN m.path = s.parent_path THEN 0 ELSE 1 END,
m.menu_id
LIMIT 1
)
);
-- 补齐后可查看这一批按钮
SELECT
p.menu_name AS parent_menu_name,
p.path AS parent_path,
c.menu_name,
c.perms,
c.order_num
FROM sys_menu c
INNER JOIN sys_menu p ON p.menu_id = c.parent_id
WHERE c.menu_type = 'F'
AND c.create_by = 'codex'
ORDER BY p.path, c.order_num, c.menu_id;
COMMIT;