feat(users): merchandiser inherits purchase permission subject

采购-跟单(merchandiser,含跟单组与雁兰/槐米特例)解析权限主体时追加采购负责人主体:给采购负责人开通的节点权限与供应链权限对跟单自动生效,无需重复开通;核价与质检主体保持独立。
This commit is contained in:
WuYongJie 2026-09-02 16:19:57 +08:00
parent 607b030034
commit 7ed6c061c4
2 changed files with 36 additions and 3 deletions

View File

@ -68,7 +68,7 @@ describe('intake node permission settings', () => {
'江苏简尚品牌管理有限公司 > 供应链中心 > 品牌 采购部 > 跟单组',
],
}),
).toEqual(['merchandiser'])
).toEqual(['merchandiser', 'purchase'])
expect(
resolveIntakeNodePermissionSubjectKeys({
@ -99,7 +99,7 @@ describe('intake node permission settings', () => {
'江苏简尚品牌管理有限公司 > 供应链中心 > 跟单质检部',
],
}),
).toEqual(['merchandiser'])
).toEqual(['merchandiser', 'purchase'])
expect(
resolveIntakeNodePermissionSubjectKeys({
@ -110,7 +110,7 @@ describe('intake node permission settings', () => {
'江苏简尚品牌管理有限公司 > 供应链中心 > 跟单质检部',
],
}),
).toEqual(['merchandiser'])
).toEqual(['merchandiser', 'purchase'])
expect(
resolveIntakeNodePermissionSubjectKeys({
@ -188,6 +188,37 @@ describe('intake node permission settings', () => {
).toEqual(['management'])
})
it('lets merchandiser users inherit permissions opened for purchasing', () => {
const subjectKeys = resolveIntakeNodePermissionSubjectKeys({
name: '雁兰',
role: 'USER',
businessRoles: ['PURCHASING'],
departmentPaths: [
'江苏简尚品牌管理有限公司 > 供应链中心 > 跟单质检部',
],
})
expect(subjectKeys).toEqual(['merchandiser', 'purchase'])
expect(
resolveIntakeNodePermissionAccess({}, 'bomCostingWorkbench', subjectKeys),
).toMatchObject({
defaultState: 'readonly',
view: true,
edit: false,
})
const overrides = sanitizeIntakeNodePermissionOverrides({
[buildIntakeNodePermissionOverrideKey('warehouseManage', 'purchase', 'view')]: true,
})
expect(
resolveIntakeNodePermissionAccess(overrides, 'warehouseManage', subjectKeys),
).toMatchObject({ view: true, download: false, edit: false })
expect(
resolveIntakeNodePermissionAccess({}, 'warehouseManage', subjectKeys),
).toMatchObject({ view: false, edit: false })
})
it('uses the same matrix for default view, download, and admin-opened overrides', () => {
const spaceKeys = ['space'] as const
expect(

View File

@ -1055,6 +1055,8 @@ export function resolveIntakeNodePermissionSubjectKeys(
hasDepartmentPath(user, isMerchandiserDepartmentPath)
) {
pushUniqueSubject(keys, "merchandiser");
// 采购-跟单必须继承采购负责人主体:给采购开的权限对跟单自动生效,不允许两套分开开
pushUniqueSubject(keys, "purchase");
}
if (