diff --git a/furniture-3d-system/src/lib/business-role-inference.test.ts b/furniture-3d-system/src/lib/business-role-inference.test.ts new file mode 100644 index 00000000..3776c66f --- /dev/null +++ b/furniture-3d-system/src/lib/business-role-inference.test.ts @@ -0,0 +1,12 @@ +import { inferBusinessRolesFromDepartmentPath } from './business-role-inference' + +describe('business role inference', () => { + it('maps brand center space visual department to planning', () => { + const result = inferBusinessRolesFromDepartmentPath( + '江苏简尚品牌管理有限公司 > 品牌中心 > 空间视觉部', + ) + + expect(result.businessRoles).toEqual(['PLANNING']) + expect(result.reason).toContain('企划') + }) +}) diff --git a/furniture-3d-system/src/lib/business-role-inference.ts b/furniture-3d-system/src/lib/business-role-inference.ts index 1a99ebbb..a1ca6bfb 100644 --- a/furniture-3d-system/src/lib/business-role-inference.ts +++ b/furniture-3d-system/src/lib/business-role-inference.ts @@ -170,10 +170,10 @@ export function inferBusinessRolesFromDepartmentPath( if (root === '品牌中心' && includesSegment(parts, /空间视觉部/)) { return { - businessRoles: ['DESIGN'], + businessRoles: ['PLANNING'], excluded: false, shouldWarnWhenEmpty: true, - reason: '品牌中心空间视觉部默认归设计', + reason: '品牌中心空间视觉部默认归企划', } } diff --git a/furniture-3d-system/src/lib/non-integrated-permissions.test.ts b/furniture-3d-system/src/lib/non-integrated-permissions.test.ts index d8a11a82..d9fb5038 100644 --- a/furniture-3d-system/src/lib/non-integrated-permissions.test.ts +++ b/furniture-3d-system/src/lib/non-integrated-permissions.test.ts @@ -165,6 +165,21 @@ describe('non-integrated intake permissions', () => { expect(canEditNonIntegratedWorkspace(baseProduct, user, '设计卖点')).toBe(false) }) + it('keeps planning business role from opening planning layout without space visual department', () => { + const user = { + id: 'planning-role-only-id', + name: '企划B', + role: 'USER', + businessRoles: ['PLANNING'], + departmentPaths: [ + '江苏简尚品牌管理有限公司 > 品牌中心 > 商品企划部 > 一线品牌', + ], + } + + expect(canEditNonIntegratedWorkspace(baseProduct, user, '空间布局')).toBe(false) + expect(canEditNonIntegratedWorkspace(baseProduct, user, '企划布局')).toBe(false) + }) + it('separates purchaser owner, pricing group, and quality group access', () => { const purchaser = { id: 'purchase-id', diff --git a/furniture-3d-system/src/lib/non-integrated-permissions.ts b/furniture-3d-system/src/lib/non-integrated-permissions.ts index 2e5e764f..e31a9285 100644 --- a/furniture-3d-system/src/lib/non-integrated-permissions.ts +++ b/furniture-3d-system/src/lib/non-integrated-permissions.ts @@ -181,7 +181,7 @@ function isBrandCenterDepartmentPath(path: string) { } function isSpaceVisualDepartmentPath(path: string) { - return /空间视觉部/.test(path) + return /品牌中心/.test(path) && /空间视觉部/.test(path) } function isSupplyChainPurchaseDepartmentPath(path: string) { @@ -267,10 +267,7 @@ export function isIntakeNonIntegratedBrandCenterPlanningUser( export function isIntakeNonIntegratedSpaceDepartmentUser( user: IntakeNonIntegratedPermissionUser, ) { - return ( - hasDepartmentPath(user, isSpaceVisualDepartmentPath) || - hasBusinessRoleFallback(user, 'DESIGN') - ) + return hasDepartmentPath(user, isSpaceVisualDepartmentPath) } export function isIntakeNonIntegratedSupplyChainUser(