用户组增加权限控制

This commit is contained in:
mtvpls
2026-04-22 16:22:17 +08:00
parent 2734de0c85
commit 0916e4ff08
61 changed files with 617 additions and 165 deletions
+3
View File
@@ -3,6 +3,7 @@
import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { requireFeaturePermission } from '@/lib/permissions';
import { OpenListClient } from '@/lib/openlist.client';
export const runtime = 'nodejs';
@@ -13,6 +14,8 @@ export const runtime = 'nodejs';
*/
export async function POST(request: NextRequest) {
try {
const authResult = await requireFeaturePermission(request, 'private_library', '无权限访问私人影库');
if (authResult instanceof NextResponse) return authResult;
// 权限检查
const authInfo = getAuthInfoFromCookie(request);
if (!authInfo || !authInfo.username) {
@@ -3,6 +3,7 @@
import { NextRequest, NextResponse } from 'next/server';
import { getConfig } from '@/lib/config';
import { hasFeaturePermission } from '@/lib/permissions';
export const runtime = 'nodejs';
@@ -44,7 +45,8 @@ export async function GET(
if (username) {
// 检查用户是否被封禁
const userInfo = await db.getUserInfoV2(username);
if (userInfo && !userInfo.banned) {
const allowed = await hasFeaturePermission(username, 'private_library');
if (userInfo && !userInfo.banned && allowed) {
isValidToken = true;
}
}
+3
View File
@@ -4,6 +4,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { getConfig } from '@/lib/config';
import { requireFeaturePermission } from '@/lib/permissions';
import { db } from '@/lib/db';
import { OpenListClient } from '@/lib/openlist.client';
import {
@@ -21,6 +22,8 @@ export const runtime = 'nodejs';
*/
export async function POST(request: NextRequest) {
try {
const authResult = await requireFeaturePermission(request, 'private_library', '无权限访问私人影库');
if (authResult instanceof NextResponse) return authResult;
const authInfo = getAuthInfoFromCookie(request);
if (!authInfo || !authInfo.username) {
return NextResponse.json({ error: '未授权' }, { status: 401 });
+3
View File
@@ -4,6 +4,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { getConfig } from '@/lib/config';
import { requireFeaturePermission } from '@/lib/permissions';
import { db } from '@/lib/db';
import {
invalidateMetaInfoCache,
@@ -19,6 +20,8 @@ export const runtime = 'nodejs';
*/
export async function POST(request: NextRequest) {
try {
const authResult = await requireFeaturePermission(request, 'private_library', '无权限访问私人影库');
if (authResult instanceof NextResponse) return authResult;
// 权限检查
const authInfo = getAuthInfoFromCookie(request);
if (!authInfo || !authInfo.username) {
+3
View File
@@ -4,6 +4,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { getConfig } from '@/lib/config';
import { requireFeaturePermission } from '@/lib/permissions';
import { OpenListClient } from '@/lib/openlist.client';
import {
getCachedVideoInfo,
@@ -20,6 +21,8 @@ export const runtime = 'nodejs';
*/
export async function GET(request: NextRequest) {
try {
const authResult = await requireFeaturePermission(request, 'private_library', '无权限访问私人影库');
if (authResult instanceof NextResponse) return authResult;
const authInfo = getAuthInfoFromCookie(request);
if (!authInfo || !authInfo.username) {
return NextResponse.json({ error: '未授权' }, { status: 401 });
+3
View File
@@ -4,6 +4,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { getConfig } from '@/lib/config';
import { requireFeaturePermission } from '@/lib/permissions';
import { db } from '@/lib/db';
import { OpenListClient } from '@/lib/openlist.client';
import {
@@ -21,6 +22,8 @@ export const runtime = 'nodejs';
*/
export async function GET(request: NextRequest) {
try {
const authResult = await requireFeaturePermission(request, 'private_library', '无权限访问私人影库');
if (authResult instanceof NextResponse) return authResult;
const authInfo = getAuthInfoFromCookie(request);
if (!authInfo || !authInfo.username) {
return NextResponse.json({ error: '未授权' }, { status: 401 });
+7 -2
View File
@@ -5,6 +5,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { getConfig } from '@/lib/config';
import { OpenListClient } from '@/lib/openlist.client';
import { hasFeaturePermission } from '@/lib/permissions';
export const runtime = 'nodejs';
@@ -39,14 +40,18 @@ export async function GET(
if (username) {
// 检查用户是否被封禁
const userInfo = await db.getUserInfoV2(username);
if (userInfo && !userInfo.banned) {
const allowed = await hasFeaturePermission(username, 'private_library');
if (userInfo && !userInfo.banned && allowed) {
hasValidToken = true;
}
}
}
// 验证用户登录
const hasValidAuth = authInfo && authInfo.username;
const hasValidAuth = !!(
authInfo?.username &&
(await hasFeaturePermission(authInfo.username, 'private_library'))
);
// 两者至少满足其一
if (!hasValidToken && !hasValidAuth) {
+3
View File
@@ -4,6 +4,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { getConfig } from '@/lib/config';
import { requireFeaturePermission } from '@/lib/permissions';
import { OpenListClient } from '@/lib/openlist.client';
export const runtime = 'nodejs';
@@ -65,6 +66,8 @@ async function getFinalUrl(url: string, maxRedirects = 5): Promise<string> {
*/
export async function GET(request: NextRequest) {
try {
const authResult = await requireFeaturePermission(request, 'private_library', '无权限访问私人影库');
if (authResult instanceof NextResponse) return authResult;
const authInfo = getAuthInfoFromCookie(request);
if (!authInfo || !authInfo.username) {
return NextResponse.json({ error: '未授权' }, { status: 401 });
@@ -4,6 +4,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { getConfig } from '@/lib/config';
import { requireFeaturePermission } from '@/lib/permissions';
import { OpenListClient } from '@/lib/openlist.client';
import { invalidateVideoInfoCache } from '@/lib/openlist-cache';
@@ -15,6 +16,8 @@ export const runtime = 'nodejs';
*/
export async function POST(request: NextRequest) {
try {
const authResult = await requireFeaturePermission(request, 'private_library', '无权限访问私人影库');
if (authResult instanceof NextResponse) return authResult;
const authInfo = getAuthInfoFromCookie(request);
if (!authInfo || !authInfo.username) {
return NextResponse.json({ error: '未授权' }, { status: 401 });
+3
View File
@@ -4,6 +4,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { getConfig } from '@/lib/config';
import { requireFeaturePermission } from '@/lib/permissions';
import { startOpenListRefresh } from '@/lib/openlist-refresh';
export const runtime = 'nodejs';
@@ -14,6 +15,8 @@ export const runtime = 'nodejs';
*/
export async function POST(request: NextRequest) {
try {
const authResult = await requireFeaturePermission(request, 'private_library', '无权限访问私人影库');
if (authResult instanceof NextResponse) return authResult;
// 权限检查
const authInfo = getAuthInfoFromCookie(request);
if (!authInfo || !authInfo.username) {
@@ -3,6 +3,7 @@
import { NextRequest, NextResponse } from 'next/server';
import { getAuthInfoFromCookie } from '@/lib/auth';
import { requireFeaturePermission } from '@/lib/permissions';
import { getScanTask } from '@/lib/scan-task';
export const runtime = 'nodejs';
@@ -13,6 +14,8 @@ export const runtime = 'nodejs';
*/
export async function GET(request: NextRequest) {
try {
const authResult = await requireFeaturePermission(request, 'private_library', '无权限访问私人影库');
if (authResult instanceof NextResponse) return authResult;
const authInfo = getAuthInfoFromCookie(request);
if (!authInfo || !authInfo.username) {
return NextResponse.json({ error: '未授权' }, { status: 401 });