-- ============================================================================= -- 报废审批流权限码(动态权限,不硬编码角色) -- scrap_apply 提交报废申请 / 预检 -- scrap_approval 查看审批列表 / 审批(通过/驳回) -- scrap_execute 按单报废执行(扣减库存) -- 授予:apply/execute 复制现有持 'scrap_create:operation' 的角色; -- approval 复制现有持 'scrap_list:operation' 的角色 + 超管/主管。 -- 执行: docker exec -i inventory_db psql -U test -d inventory_system < 本文件 -- ============================================================================= BEGIN; -- 1) 注册权限元素 INSERT INTO sys_element (menu_code, name, code, element_type) SELECT 'scrap_create', '报废申请(提交)', 'scrap_apply', 'operation' WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'scrap_apply'); INSERT INTO sys_element (menu_code, name, code, element_type) SELECT 'scrap_create', '按单报废(执行)', 'scrap_execute', 'operation' WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'scrap_execute'); INSERT INTO sys_element (menu_code, name, code, element_type) SELECT 'scrap_list', '报废审批(查看/审批)', 'scrap_approval', 'operation' WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'scrap_approval'); -- 2) scrap_apply / scrap_execute ← 现有持 scrap_create:operation 的角色 INSERT INTO sys_role_permission (role_code, target_code, type, company_name) SELECT DISTINCT sp.role_code, v.target_code, 'element', sp.company_name FROM sys_role_permission sp CROSS JOIN (VALUES ('scrap_apply'), ('scrap_execute')) AS v(target_code) WHERE sp.target_code = 'scrap_create:operation' AND sp.type = 'element' AND NOT EXISTS ( SELECT 1 FROM sys_role_permission r WHERE r.role_code = sp.role_code AND r.target_code = v.target_code AND r.type = 'element' AND COALESCE(r.company_name,'') = COALESCE(sp.company_name,'') ); -- 3) scrap_approval ← 现有持 scrap_list:operation 的角色 INSERT INTO sys_role_permission (role_code, target_code, type, company_name) SELECT DISTINCT sp.role_code, 'scrap_approval', 'element', sp.company_name FROM sys_role_permission sp WHERE sp.target_code = 'scrap_list:operation' AND sp.type = 'element' AND NOT EXISTS ( SELECT 1 FROM sys_role_permission r WHERE r.role_code = sp.role_code AND r.target_code = 'scrap_approval' AND r.type = 'element' AND COALESCE(r.company_name,'') = COALESCE(sp.company_name,'') ); -- 4) 超管 / 主管 兜底持有审批权 INSERT INTO sys_role_permission (role_code, target_code, type, company_name) SELECT v.role_code, 'scrap_approval', 'element', NULL FROM (VALUES ('SUPER_ADMIN'), ('SUPERVISOR')) AS v(role_code) WHERE NOT EXISTS ( SELECT 1 FROM sys_role_permission r WHERE r.role_code = v.role_code AND r.target_code = 'scrap_approval' AND r.type = 'element' ); COMMIT;