Files
BMS/bms-back/sql/monitor/order_source_button_permissions.sql
T
caojia 0a7f639138 sql
2026-10-15 18:49:16 +08:00

56 lines
2.8 KiB
SQL

-- 订单列表:补齐当前代码实际使用的按钮权限(MySQL)。
-- 同步计费 / 同步选中 / 行内同步计费:monitor:orderSource:sync。
-- 检测产品:monitor:orderSource:list,与查询共用,无独立权限键。
-- 操作记录:前端无独立权限指令,后端接口使用 monitor:orderSource:list。
-- 只补菜单,不自动扩大业务角色权限;执行后在角色管理中勾选「同步计费」。
-- 可重复执行;menu_id 使用自增,避免固定 ID 被占用。
SET NAMES utf8mb4;
-- 先确认订单列表父菜单。若无结果,需先补页面菜单,本脚本不会插入孤立按钮。
SELECT menu_id, menu_name, parent_id, component, perms
FROM sys_menu
WHERE menu_type = 'C'
AND (component = 'monitor/orderSource/index' OR perms = 'monitor:orderSource:list');
INSERT INTO sys_menu
(menu_name, parent_id, order_num, path, component, is_frame, is_cache,
menu_type, visible, status, perms, icon, create_by, create_time, remark)
SELECT N'同步计费', p.menu_id, 2, '', NULL, 1, 0,
'F', '0', '0', 'monitor:orderSource:sync', '#', 'admin', sysdate(),
N'订单列表:同步计费、同步选中、行内同步计费共用权限'
FROM sys_menu p
WHERE p.menu_type = 'C'
AND (p.component = 'monitor/orderSource/index' OR p.perms = 'monitor:orderSource:list')
AND NOT EXISTS (
SELECT 1 FROM sys_menu b
WHERE b.parent_id = p.menu_id
AND b.menu_type = 'F'
AND b.perms = 'monitor:orderSource:sync'
);
-- 核对结果:应在订单列表下面看到「查询」「同步计费」。
SELECT p.menu_id AS page_menu_id, p.menu_name AS page_name,
b.menu_id AS button_menu_id, b.menu_name AS button_name, b.perms, b.status
FROM sys_menu p
LEFT JOIN sys_menu b ON b.parent_id = p.menu_id AND b.menu_type = 'F'
WHERE p.menu_type = 'C'
AND (p.component = 'monitor/orderSource/index' OR p.perms = 'monitor:orderSource:list')
ORDER BY p.menu_id, b.order_num, b.menu_id;
-- 可选:如需 SQL 授权,确认目标角色 ID 后单独执行以下语句。
-- 不要把截图中的角色权限字符 ORA_6043 直接当作数据库 role_id。
-- SET @target_role_id = 6043; -- 请替换为已确认的 sys_role.role_id
-- INSERT INTO sys_role_menu (role_id, menu_id)
-- SELECT r.role_id, b.menu_id
-- FROM sys_role r
-- JOIN sys_role_menu granted ON granted.role_id = r.role_id
-- JOIN sys_menu p ON p.menu_id = granted.menu_id AND p.menu_type = 'C'
-- JOIN sys_menu b ON b.parent_id = p.menu_id AND b.menu_type = 'F'
-- WHERE r.role_id = @target_role_id
-- AND (p.component = 'monitor/orderSource/index' OR p.perms = 'monitor:orderSource:list')
-- AND b.perms = 'monitor:orderSource:sync'
-- AND NOT EXISTS (
-- SELECT 1 FROM sys_role_menu rm
-- WHERE rm.role_id = r.role_id AND rm.menu_id = b.menu_id
-- );