Files
KCGL/inventory-backend/migrations_add_cross_domain_permission.sql
yueli e1417d740a feat: 全模块公司隔离 + crossDomain权限码动态跨域控制
- get_current_company_filter: 新增_has_cross_domain_permission, 权限码替代硬编码
- 补全11个Service的get_current_company_filter调用(semi/product/service/outbound/bom/trans/scrap/summary)
- base/search修复: search_material此前无隔离, 已补全
- get_current_company_filter兜底: JWT缺company_name时返回__NO_COMPANY__防止放行
- permission.py: _get_operator_company补全返回值, 修复权限页保存逻辑
- 新增crossDomain迁移脚本, element_type=element挂system_mgmt下
2026-07-15 11:11:40 +08:00

55 lines
2.0 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.

-- ============================================================
-- migrations_add_cross_domain_permission.sql
-- 新增「全局跨域访问」权限节点,支持基于权限码的动态跨公司数据访问控制
--
-- 逻辑:
-- - 拥有 crossDomain 权限的角色 → 可查看所有公司数据
-- - 无此权限的角色 → 只能看本公司数据
--
-- 执行方式:
-- psql -h <host> -U postgres -d inventory_system -f migrations_add_cross_domain_permission.sql
-- ============================================================
BEGIN;
-- 1. 向 sys_element 插入跨域权限码(挂 system 菜单下)
INSERT INTO sys_element (menu_code, name, code, element_type)
SELECT 'system_mgmt', '全局跨域访问', 'crossDomain', 'element'
WHERE NOT EXISTS (
SELECT 1 FROM sys_element WHERE code = 'crossDomain'
);
-- 2. 向 sys_menu 插入菜单节点(如果 system 菜单下还缺此菜单项)
-- 注意: 这是一个能力型权限,不一定需要前端菜单入口,
-- 如果需要在权限分配页面中可见,保留此 INSERT
-- 如果纯后端控制,此行可注释。
INSERT INTO sys_menu (code, name, parent_code, is_visible)
SELECT 'system_cross_domain', '全局跨域访问', 'system_mgmt', true
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu WHERE code = 'system_cross_domain'
);
-- 3. 默认分配给 SUPER_ADMIN 和 SUPERVISOR 角色
INSERT INTO sys_role_permission (role_code, target_code, type)
SELECT 'SUPER_ADMIN', 'crossDomain', 'element'
WHERE NOT EXISTS (
SELECT 1 FROM sys_role_permission
WHERE role_code = 'SUPER_ADMIN' AND target_code = 'crossDomain'
);
INSERT INTO sys_role_permission (role_code, target_code, type)
SELECT 'SUPERVISOR', 'crossDomain', 'element'
WHERE NOT EXISTS (
SELECT 1 FROM sys_role_permission
WHERE role_code = 'SUPERVISOR' AND target_code = 'crossDomain'
);
-- 4. 验证
SELECT code, name, menu_code, element_type
FROM sys_element WHERE code = 'crossDomain';
SELECT role_code, target_code, type
FROM sys_role_permission WHERE target_code = 'crossDomain';
COMMIT;