mirror of
https://github.com/MoonTechLab/LunaTV.git
synced 2026-03-10 14:23:13 +08:00
feat: add batch source and user operates
This commit is contained in:
@@ -9,7 +9,7 @@ import { db } from '@/lib/db';
|
||||
export const runtime = 'nodejs';
|
||||
|
||||
// 支持的操作类型
|
||||
type Action = 'add' | 'disable' | 'enable' | 'delete' | 'sort';
|
||||
type Action = 'add' | 'disable' | 'enable' | 'delete' | 'sort' | 'batch_disable' | 'batch_enable' | 'batch_delete';
|
||||
|
||||
interface BaseBody {
|
||||
action?: Action;
|
||||
@@ -37,7 +37,7 @@ export async function POST(request: NextRequest) {
|
||||
const username = authInfo.username;
|
||||
|
||||
// 基础校验
|
||||
const ACTIONS: Action[] = ['add', 'disable', 'enable', 'delete', 'sort'];
|
||||
const ACTIONS: Action[] = ['add', 'disable', 'enable', 'delete', 'sort', 'batch_disable', 'batch_enable', 'batch_delete'];
|
||||
if (!username || !action || !ACTIONS.includes(action)) {
|
||||
return NextResponse.json({ error: '参数格式错误' }, { status: 400 });
|
||||
}
|
||||
@@ -111,6 +111,88 @@ export async function POST(request: NextRequest) {
|
||||
return NextResponse.json({ error: '该源不可删除' }, { status: 400 });
|
||||
}
|
||||
adminConfig.SourceConfig.splice(idx, 1);
|
||||
|
||||
// 检查并清理用户组和用户的权限数组
|
||||
// 清理用户组权限
|
||||
if (adminConfig.UserConfig.Tags) {
|
||||
adminConfig.UserConfig.Tags.forEach(tag => {
|
||||
if (tag.enabledApis) {
|
||||
tag.enabledApis = tag.enabledApis.filter(api => api !== key);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 清理用户权限
|
||||
adminConfig.UserConfig.Users.forEach(user => {
|
||||
if (user.enabledApis) {
|
||||
user.enabledApis = user.enabledApis.filter(api => api !== key);
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
case 'batch_disable': {
|
||||
const { keys } = body as { keys?: string[] };
|
||||
if (!Array.isArray(keys) || keys.length === 0) {
|
||||
return NextResponse.json({ error: '缺少 keys 参数或为空' }, { status: 400 });
|
||||
}
|
||||
keys.forEach(key => {
|
||||
const entry = adminConfig.SourceConfig.find((s) => s.key === key);
|
||||
if (entry) {
|
||||
entry.disabled = true;
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
case 'batch_enable': {
|
||||
const { keys } = body as { keys?: string[] };
|
||||
if (!Array.isArray(keys) || keys.length === 0) {
|
||||
return NextResponse.json({ error: '缺少 keys 参数或为空' }, { status: 400 });
|
||||
}
|
||||
keys.forEach(key => {
|
||||
const entry = adminConfig.SourceConfig.find((s) => s.key === key);
|
||||
if (entry) {
|
||||
entry.disabled = false;
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
case 'batch_delete': {
|
||||
const { keys } = body as { keys?: string[] };
|
||||
if (!Array.isArray(keys) || keys.length === 0) {
|
||||
return NextResponse.json({ error: '缺少 keys 参数或为空' }, { status: 400 });
|
||||
}
|
||||
// 过滤掉 from=config 的源,但不报错
|
||||
const keysToDelete = keys.filter(key => {
|
||||
const entry = adminConfig.SourceConfig.find((s) => s.key === key);
|
||||
return entry && entry.from !== 'config';
|
||||
});
|
||||
|
||||
// 批量删除
|
||||
keysToDelete.forEach(key => {
|
||||
const idx = adminConfig.SourceConfig.findIndex((s) => s.key === key);
|
||||
if (idx !== -1) {
|
||||
adminConfig.SourceConfig.splice(idx, 1);
|
||||
}
|
||||
});
|
||||
|
||||
// 检查并清理用户组和用户的权限数组
|
||||
if (keysToDelete.length > 0) {
|
||||
// 清理用户组权限
|
||||
if (adminConfig.UserConfig.Tags) {
|
||||
adminConfig.UserConfig.Tags.forEach(tag => {
|
||||
if (tag.enabledApis) {
|
||||
tag.enabledApis = tag.enabledApis.filter(api => !keysToDelete.includes(api));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 清理用户权限
|
||||
adminConfig.UserConfig.Users.forEach(user => {
|
||||
if (user.enabledApis) {
|
||||
user.enabledApis = user.enabledApis.filter(api => !keysToDelete.includes(api));
|
||||
}
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'sort': {
|
||||
|
||||
Reference in New Issue
Block a user