-- ============================================================================= -- 补注册 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;