feat(project): init

This commit is contained in:
zhangheng
2026-04-25 11:26:33 +08:00
commit 9bf212f67c
63 changed files with 11141 additions and 0 deletions

39
lib/api-auth.ts Normal file
View File

@@ -0,0 +1,39 @@
import type { NextRequest } from "next/server";
import { SESSION_COOKIE_NAME, getUserFromSessionToken } from "@/lib/auth";
import type { HttpError, UserRecord } from "@/lib/types";
export function getApiCurrentUser(request: NextRequest): UserRecord | null {
const sessionToken = request.cookies.get(SESSION_COOKIE_NAME)?.value;
return getUserFromSessionToken(sessionToken);
}
export function requireApiUser(request: NextRequest): UserRecord {
const user = getApiCurrentUser(request);
if (!user) {
const error = new Error("请先登录。") as HttpError;
error.statusCode = 401;
throw error;
}
if (!user.isActive) {
const error = new Error("当前账号已被禁用。") as HttpError;
error.statusCode = 403;
throw error;
}
return user;
}
export function requireApiAdmin(request: NextRequest): UserRecord {
const user = requireApiUser(request);
if (user.role !== "admin") {
const error = new Error("需要管理员权限。") as HttpError;
error.statusCode = 403;
throw error;
}
return user;
}