From 3b7322954aeaf4098aee158aba9c90207288c741 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Fri, 21 Aug 2026 16:32:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=86=E5=88=86=E6=89=93=E6=89=8B=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/services/worker-platform/index.ts | 1 + .../worker-platform/worker-auth-policy.ts | 42 ++++++++++++++++ .../worker-platform/worker-service.ts | 49 +++---------------- 3 files changed, 50 insertions(+), 42 deletions(-) create mode 100644 apps/backend/src/services/worker-platform/worker-auth-policy.ts diff --git a/apps/backend/src/services/worker-platform/index.ts b/apps/backend/src/services/worker-platform/index.ts index da20bcaa..0cb58bc7 100644 --- a/apps/backend/src/services/worker-platform/index.ts +++ b/apps/backend/src/services/worker-platform/index.ts @@ -1,6 +1,7 @@ export * from './mappers.js' export * from './worker-session-context-service.js' export * from './worker-service.js' +export * from './worker-auth-policy.js' export * from './worker-platform-defaults.js' export * from './work-order-timeout-policy.js' export * from './after-sales-service.js' diff --git a/apps/backend/src/services/worker-platform/worker-auth-policy.ts b/apps/backend/src/services/worker-platform/worker-auth-policy.ts new file mode 100644 index 00000000..2698a7b4 --- /dev/null +++ b/apps/backend/src/services/worker-platform/worker-auth-policy.ts @@ -0,0 +1,42 @@ +import type { WorkerUserRow } from '../../repositories/worker-platform/index.js' +import { createHttpError } from '../../utils/http.js' + +export function assertWorkerLoginAllowed(worker: WorkerUserRow) { + if (worker.status === 'active') return + + if (worker.status === 'rejected') { + throw createHttpError('接单账号已被冻结,无法登录', { + statusCode: 403, + errorCode: 'worker_rejected', + }) + } + + if (worker.status === 'pending_review') { + throw createHttpError('接单账号待处理,暂无法登录', { + statusCode: 403, + errorCode: 'worker_pending_review', + }) + } + + throw createHttpError('接单账号已停用', { + statusCode: 403, + errorCode: 'worker_disabled', + }) +} + +export function normalizeWorkerDeviceType(value: unknown): string { + const type = String(value || '') + .trim() + .toLowerCase() + return type === 'mobile' || type === 'tablet' ? type : 'pc' +} + +export function normalizeWorkerDeviceId(value: unknown, fallback: string): string { + const deviceId = String(value || '').trim() + return (deviceId || fallback).slice(0, 200) +} + +export function normalizeWorkerDeviceName(value: unknown, deviceType: string): string { + const name = String(value || '').trim() + return (name || (deviceType === 'pc' ? 'PC 浏览器' : '移动设备')).slice(0, 100) +} diff --git a/apps/backend/src/services/worker-platform/worker-service.ts b/apps/backend/src/services/worker-platform/worker-service.ts index f6a3db24..11813f0f 100644 --- a/apps/backend/src/services/worker-platform/worker-service.ts +++ b/apps/backend/src/services/worker-platform/worker-service.ts @@ -152,6 +152,12 @@ import { isWorkerPasswordStrong, verifyWorkerPassword, } from './mappers.js' +import { + assertWorkerLoginAllowed, + normalizeWorkerDeviceId, + normalizeWorkerDeviceName, + normalizeWorkerDeviceType, +} from './worker-auth-policy.js' import { ensureWorkerPlatformDefaults } from './worker-platform-defaults.js' import { normalizeWorkOrderTimeoutPolicy } from './work-order-timeout-policy.js' @@ -165,6 +171,7 @@ export { requireActiveWorkerSession, } from './worker-session-context-service.js' export type { WorkerSession } from './worker-session-context-service.js' +export { assertWorkerLoginAllowed } from './worker-auth-policy.js' export { ensureWorkerPlatformDefaults } from './worker-platform-defaults.js' export { isWorkOrderTimeoutPolicy, @@ -719,31 +726,6 @@ async function authenticateWorkerCredentials( return worker } -export function assertWorkerLoginAllowed(worker: WorkerUserRow) { - if (worker.status === 'active') { - return - } - - if (worker.status === 'rejected') { - throw createHttpError('接单账号已被冻结,无法登录', { - statusCode: 403, - errorCode: 'worker_rejected', - }) - } - - if (worker.status === 'pending_review') { - throw createHttpError('接单账号待处理,暂无法登录', { - statusCode: 403, - errorCode: 'worker_pending_review', - }) - } - - throw createHttpError('接单账号已停用', { - statusCode: 403, - errorCode: 'worker_disabled', - }) -} - export async function logoutWorkerSession(token: unknown) { const normalizedToken = String(token || '').trim() if (!normalizedToken) { @@ -892,23 +874,6 @@ function mapWorkerSession(session: WorkerSessionRow, currentSessionId: string) { } } -function normalizeWorkerDeviceType(value: unknown): string { - const type = String(value || '') - .trim() - .toLowerCase() - return type === 'mobile' || type === 'tablet' ? type : 'pc' -} - -function normalizeWorkerDeviceId(value: unknown, fallback: string): string { - const deviceId = String(value || '').trim() - return (deviceId || fallback).slice(0, 200) -} - -function normalizeWorkerDeviceName(value: unknown, deviceType: string): string { - const name = String(value || '').trim() - return (name || (deviceType === 'pc' ? 'PC 浏览器' : '移动设备')).slice(0, 100) -} - export async function getWorkerSessionSummary(token: unknown) { const session = await verifyWorkerSessionToken(token) const worker = await getRequiredWorker(session.workerId)