Files
BMS/bms-back/sql/20261028_ar_bill_export_download_perm.sql
T
2026-10-28 14:58:09 +08:00

65 lines
2.4 KiB
SQL

-- 应收账单导出与下载权限拆分
-- ar:bill:export 继续用于账单列表导出和发起账单明细导出。
-- 新增 ar:bill:download 用于下载已生成的账单明细文件。
-- 新权限仅在首次创建时继承原 ar:bill:export 角色授权,后续可由管理员独立调整。
START TRANSACTION;
UPDATE sys_menu
SET menu_name = '账单导出',
remark = '应收账单列表导出及账单明细导出任务'
WHERE perms = 'ar:bill:export';
SET @ar_bill_download_perm_created = 0;
INSERT INTO sys_menu (
menu_name, parent_id, order_num, path, component, query, route_name,
is_frame, is_cache, menu_type, visible, status, perms, icon,
create_by, create_time, remark
)
SELECT '账单下载', export_menu.parent_id,
(SELECT COALESCE(MAX(order_num), 0) + 1
FROM sys_menu child_menu
WHERE child_menu.parent_id = export_menu.parent_id),
'', '', '', '', 1, 0, 'F', '0', '0', 'ar:bill:download', '#',
'admin', NOW(), '应收账单明细文件下载'
FROM sys_menu export_menu
WHERE export_menu.perms = 'ar:bill:export'
AND NOT EXISTS (
SELECT 1 FROM sys_menu WHERE perms = 'ar:bill:download'
)
ORDER BY export_menu.menu_id
LIMIT 1;
SET @ar_bill_download_perm_created = ROW_COUNT();
-- 初次拆分时保持现有导出角色原有下载能力;后续角色可独立增删此权限。
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT DISTINCT export_grant.role_id, download_menu.menu_id
FROM sys_role_menu export_grant
JOIN sys_menu export_menu ON export_menu.menu_id = export_grant.menu_id
JOIN sys_menu download_menu ON download_menu.perms = 'ar:bill:download'
WHERE export_menu.perms = 'ar:bill:export'
AND @ar_bill_download_perm_created > 0
AND NOT EXISTS (
SELECT 1
FROM sys_role_menu existing_grant
WHERE existing_grant.role_id = export_grant.role_id
AND existing_grant.menu_id = download_menu.menu_id
);
COMMIT;
-- 核对权限菜单及角色授权结果。
SELECT menu_id, menu_name, parent_id, order_num, menu_type, perms, remark
FROM sys_menu
WHERE perms IN ('ar:bill:export', 'ar:bill:download')
ORDER BY parent_id, order_num, menu_id;
SELECT r.role_id, r.role_name, m.menu_name, m.perms
FROM sys_role_menu rm
JOIN sys_role r ON r.role_id = rm.role_id
JOIN sys_menu m ON m.menu_id = rm.menu_id
WHERE m.perms IN ('ar:bill:export', 'ar:bill:download')
ORDER BY r.role_id, m.perms;