This commit is contained in:
2026-10-22 11:56:47 +08:00
parent 5d71af1ac9
commit de96e47d74
71 changed files with 1296 additions and 332 deletions
@@ -131,6 +131,7 @@ export async function run(context) {
if (!warehouse) throw new Error('缺少启用的平台国内仓,整柜验收无法继续')
const warehouseId = id(warehouse.id)
const containerNo = `DCA${marker}`.slice(0, 32).toUpperCase()
if (context.options?.fixedCustomerId) await verifyPermissionDenial(context, marker, warehouseId, containerNo)
const now = new Date().toISOString().slice(0, 19)
await verifyValidationBoundaries(context, warehouseId, marker, now)
@@ -222,11 +223,38 @@ export async function run(context) {
await verifyExtendedInventoryScenarios(context, warehouseId, marker, now)
await verifyPermissionDenial(context, marker, warehouseId, containerNo)
if (!context.options?.fixedCustomerId) await verifyPermissionDenial(context, marker, warehouseId, containerNo)
context.createdResources.domesticContainer = { warehouseId, inventoryId, containerNo, permissions: PERMISSIONS }
}
async function verifyPermissionDenial(context, marker, warehouseId, containerNo) {
export async function verifyPermissionDenial(context, marker, warehouseId, containerNo) {
if (context.options?.fixedCustomerId) {
const actor = context.options.fixedDomesticDenyActor
if (!actor?.username || !actor.password || !/^[1-9]\d*$/.test(id(actor.membershipId))) {
throw Error('缺少固定整柜权限拒绝账号,禁止自动创建用户或角色')
}
let user
for (let page = 1; ; page++) {
const response = await context.request('GET', `/api/platform/v1/iam/users?page=${page}&size=100&keyword=${encodeURIComponent(actor.username)}`)
const result = context.apiSuccess(MODULE, '查询固定权限拒绝账号', response)
user = result?.records?.find(item => id(item.membershipId) === id(actor.membershipId) && item.username === actor.username)
if (user || !result?.records?.length || page * Number(result.size || 100) >= Number(result.total || 0)) break
}
if (user?.status !== 'ACTIVE' || id(user.tenantId) !== '0') throw Error('固定权限拒绝账号必须为启用的平台账号')
const login = await context.request('POST', '/api/auth/login', { loginId: actor.username, password: actor.password }, '')
const session = context.apiSuccess(MODULE, '登录固定权限拒绝账号', login)
if (!session?.accessToken || !session.refreshToken) throw Error('固定权限拒绝账号未返回完整会话')
try {
const denied = await context.request('GET', `${BASE}/inventories?page=1&size=20&warehouseId=${warehouseId}&containerNo=${containerNo}`, undefined, session.accessToken)
expectCode(context, '固定无整柜权限用户被拒绝', denied, 'A0403')
if (denied.http !== 200 || String(denied.body?.code) !== 'A0403') throw Error('固定探针账号实际权限不符,停止整柜造数')
} finally {
const logout = await context.request('POST', '/api/auth/logout', { refreshToken: session.refreshToken }, session.accessToken)
context.apiSuccess(MODULE, '退出固定权限拒绝账号会话,不停用账号或角色', logout)
if (!succeeded(logout)) throw Error('固定权限拒绝账号退出失败')
}
return
}
const phone = await context.findAvailablePhone(MODULE)
const roleCode = `DC_DENY_${marker}`.slice(0, 64)
const username = `dc_deny_${marker}`.slice(0, 64).toLowerCase()