Files
KCGL/db_migrations/add_scrap_perm.sql
yueli 3d8fb198c5 feat(scrap): 报废审批流 DB 迁移(建表 + 权限码)
- scrap_approval 表(申请单,items_json 携带 source_table+stock_id 精准实物)
- trans_scrap 增加 scrap_request_no 关联申请单
- 注册权限码 scrap_apply / scrap_approval / scrap_execute 并按现有报废角色授予
2026-09-10 09:46:52 +08:00

58 lines
2.8 KiB
PL/PgSQL
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.

-- =============================================================================
-- 报废审批流权限码(动态权限,不硬编码角色)
-- 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;