Files
KCGL/db_migrations/add_scrap_selection_perm.sql
yueli 2045a89330 feat(db): 审批单据时间口径统一 + 补注册 scrap_selection 权限
unify_approval_timezone.sql:
  · scrap_approval 的 4 个时间列由 timestamptz 改为 timestamp without time zone,
    与 outbound/borrow 对齐(该表当时无业务数据,转换零损失);
  · 三张审批表 created_at/updated_at 的 DB 默认值由 UTC 的 now()/CURRENT_TIMESTAMP
    统一为 timezone('Asia/Shanghai', now()),杜绝绕过 ORM 的写入偏 8 小时。

add_scrap_selection_perm.sql:
  GET /scrap/scan 一直声明需要 scrap_selection,但该权限码从未写入
  sys_element / sys_role_permission,精确匹配与前缀展开匹配全部落空,
  导致除 SUPER_ADMIN 外没有任何角色能调用扫码接口。现补注册,
  并授予所有已持有 scrap_execute(按单报废执行)的角色。
2026-09-10 10:14:19 +08:00

35 lines
1.7 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_selection 权限码
--
-- 背景:
-- GET /api/v1/scrap/scan按单报废执行页的扫码查库存接口自始就声明需要
-- scrap_selection但该权限码从未写入 sys_element / sys_role_permission。
-- 结果 permission_required('scrap_selection') 的精确匹配与展开匹配(前缀
-- scrap_selection:)全部落空,导致除 SUPER_ADMIN 外没有任何角色能调用扫码接口。
--
-- 处理:
-- 1) 注册 scrap_selection 权限元素(挂在 scrap_create 菜单下,与 scrap_apply /
-- scrap_execute 同级);
-- 2) 授予所有已持有 scrap_execute按单报废执行的角色
-- 保证「执行报废」的人必然可以扫码。
--
-- 执行: docker exec -i inventory_db psql -U test -d inventory_system < 本文件
-- =============================================================================
BEGIN;
INSERT INTO sys_element (menu_code, name, code, element_type)
SELECT 'scrap_create', '报废扫码(查询库存)', 'scrap_selection', 'operation'
WHERE NOT EXISTS (SELECT 1 FROM sys_element WHERE code = 'scrap_selection');
INSERT INTO sys_role_permission (role_code, target_code, type, company_name)
SELECT DISTINCT sp.role_code, 'scrap_selection', 'element', sp.company_name
FROM sys_role_permission sp
WHERE sp.target_code = 'scrap_execute' 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_selection'
AND r.type = 'element' AND COALESCE(r.company_name,'') = COALESCE(sp.company_name,'')
);
COMMIT;