初次提交
Build VoiceHub FPK / build-fpk (push) Failing after 56m5s
Build and Push Docker Image / build-and-push (push) Canceled after 1h9m35s

This commit is contained in:
2026-09-06 08:19:02 +08:00
commit 4ce4649aaf
1061 changed files with 337258 additions and 0 deletions
+120
View File
@@ -0,0 +1,120 @@
import bcrypt from 'bcryptjs'
import { db } from '~/drizzle/db'
import { users } from '~/drizzle/schema'
import { eq } from 'drizzle-orm'
import { cacheService } from '../../../services/cacheService'
export default defineEventHandler(async (event) => {
// 检查认证和权限
const user = event.context.user
if (!user || !['ADMIN', 'SUPER_ADMIN'].includes(user.role)) {
throw createError({
statusCode: 403,
message: '没有权限访问'
})
}
const body = await readBody(event)
if (!body.users || !Array.isArray(body.users) || body.users.length === 0) {
throw createError({
statusCode: 400,
message: '无效的用户数据'
})
}
const results = {
created: 0,
failed: 0,
total: body.users.length
}
// 批量添加用户
for (let i = 0; i < body.users.length; i++) {
const userData = body.users[i]
try {
// 验证必填字段
if (!userData.name || !userData.username || !userData.password) {
results.failed++
continue
}
const chineseRegex = /^[\u4e00-\u9fa5]+$/
if (!chineseRegex.test(userData.name) || !chineseRegex.test(userData.username)) {
results.failed++
continue
}
// 检查用户名是否已存在
const existingUser = await db
.select()
.from(users)
.where(eq(users.username, userData.username))
.limit(1)
if (existingUser.length > 0) {
results.failed++
continue
}
// 加密密码
const hashedPassword = await bcrypt.hash(userData.password, 10)
// 角色权限控制
let validRole = 'USER' // 默认角色
if (userData.role) {
if (user.role === 'SUPER_ADMIN') {
// 超级管理员可以设置任何角色
const allowedRoles = ['USER', 'TEACHER', 'ADMIN', 'SONG_ADMIN', 'SUPER_ADMIN']
if (allowedRoles.includes(userData.role)) {
validRole = userData.role
}
} else if (user.role === 'ADMIN') {
// 普通管理员只能设置 USER 和 SONG_ADMIN 角色
const allowedRoles = ['USER', 'TEACHER', 'SONG_ADMIN']
if (allowedRoles.includes(userData.role)) {
validRole = userData.role
}
}
}
// 状态验证
let validStatus = 'active'
if (userData.status && ['active', 'withdrawn', 'graduate'].includes(userData.status)) {
validStatus = userData.status
}
// 创建用户
const newUser = await db
.insert(users)
.values({
name: userData.name,
username: userData.username,
password: hashedPassword,
role: validRole,
status: validStatus as 'active' | 'withdrawn' | 'graduate',
grade: userData.grade,
class: userData.class
})
.returning()
results.created++
} catch (error) {
console.error(`用户创建失败:`, error)
results.failed++
}
}
// 如果有用户创建成功,清除相关缓存
if (results.created > 0) {
try {
await cacheService.clearSongsCache()
console.log('批量用户创建后缓存清除成功')
} catch (cacheError) {
console.error('批量用户创建后缓存清除失败:', cacheError)
}
}
return results
})