增加分组库存与客服
This commit is contained in:
@@ -57,9 +57,14 @@ export function getTaskPrimaryClaimTokenId(task) {
|
||||
|
||||
export function createAdminViewerContext(session = null) {
|
||||
const role = normalizeAdminRole(session?.role)
|
||||
const allowedInventoryGroupCodes = role === 'support'
|
||||
? normalizeInventoryGroupCodes(session?.allowedInventoryGroups)
|
||||
: null
|
||||
|
||||
return {
|
||||
role,
|
||||
allowedInventoryGroupCodes,
|
||||
restrictInventoryGroups: role === 'support',
|
||||
canViewSensitiveTaskData: role === 'admin' || role === 'operator',
|
||||
canManageSensitiveInventory: role === 'admin',
|
||||
canManageTaskLifecycle: role === 'admin' || role === 'operator',
|
||||
@@ -200,11 +205,13 @@ export function canRegenerateClaimLinkForViewer(task, viewerContext) {
|
||||
return true
|
||||
}
|
||||
|
||||
return viewerContext.canOperateAssistedTask && isAssistedClaimTask(task)
|
||||
return viewerContext.canOperateAssistedTask
|
||||
&& isAssistedClaimTask(task)
|
||||
&& canViewerAccessTaskInventoryGroup(task, viewerContext)
|
||||
}
|
||||
|
||||
export function canViewerConfirmAssistedRole(task, viewerContext) {
|
||||
if (!viewerContext.canOperateAssistedTask || !isAssistedClaimTask(task)) {
|
||||
if (!viewerContext.canOperateAssistedTask || !isAssistedClaimTask(task) || !canViewerAccessTaskInventoryGroup(task, viewerContext)) {
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -212,13 +219,42 @@ export function canViewerConfirmAssistedRole(task, viewerContext) {
|
||||
}
|
||||
|
||||
export function canViewerRedeemAssistedTask(task, viewerContext) {
|
||||
if (!viewerContext.canOperateAssistedTask || !isAssistedClaimTask(task)) {
|
||||
if (!viewerContext.canOperateAssistedTask || !isAssistedClaimTask(task) || !canViewerAccessTaskInventoryGroup(task, viewerContext)) {
|
||||
return false
|
||||
}
|
||||
|
||||
return ['role_confirmed', 'redeeming'].includes(String(task?.task_status || '').trim())
|
||||
}
|
||||
|
||||
export function canViewerAccessTaskInventoryGroup(task, viewerContext = createAdminViewerContext()) {
|
||||
if (!viewerContext.restrictInventoryGroups) {
|
||||
return true
|
||||
}
|
||||
|
||||
const allowedInventoryGroupCodes = Array.isArray(viewerContext.allowedInventoryGroupCodes)
|
||||
? viewerContext.allowedInventoryGroupCodes
|
||||
: []
|
||||
|
||||
if (allowedInventoryGroupCodes.length === 0) {
|
||||
return false
|
||||
}
|
||||
|
||||
const taskContext = parseTaskContext(task)
|
||||
const inventoryGroupCode = String(taskContext?.inventoryGroupCode || '').trim()
|
||||
|
||||
if (!inventoryGroupCode) {
|
||||
return true
|
||||
}
|
||||
|
||||
return allowedInventoryGroupCodes.includes(inventoryGroupCode)
|
||||
}
|
||||
|
||||
export function normalizeInventoryGroupCodes(values) {
|
||||
return Array.from(new Set((Array.isArray(values) ? values : [])
|
||||
.map((value) => String(value || '').trim())
|
||||
.filter(Boolean)))
|
||||
}
|
||||
|
||||
function mapRedeemResolutionAttempt(value) {
|
||||
if (!value || typeof value !== 'object') {
|
||||
return null
|
||||
|
||||
Reference in New Issue
Block a user