fix(submission): restrict submission access to current user

This commit is contained in:
cfngc4594 2026-05-29 10:28:56 +08:00
parent 662e223042
commit 6324cc9aa6
4 changed files with 33 additions and 16 deletions

View File

@ -75,8 +75,13 @@ export const getAnalysis = async (
); );
} }
const analysis = await prisma.codeAnalysis.findUnique({ const analysis = await prisma.codeAnalysis.findFirst({
where: { submissionId: submissionId }, where: {
submissionId,
submission: {
userId: session.user.id,
},
},
}); });
if (!analysis) { if (!analysis) {

View File

@ -1,4 +1,5 @@
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
import { auth } from "@/lib/auth";
import prisma from "@/lib/prisma"; import prisma from "@/lib/prisma";
import { Locale } from "@/generated/client"; import { Locale } from "@/generated/client";
import { Label } from "@/components/ui/label"; import { Label } from "@/components/ui/label";
@ -22,17 +23,17 @@ export const DetailTable = async ({ submissionId }: DetailTableProps) => {
const t = await getTranslations("DetailsPage"); const t = await getTranslations("DetailsPage");
const s = await getTranslations("StatusMessage"); const s = await getTranslations("StatusMessage");
const locale = (await getLocale()) as Locale; const locale = (await getLocale()) as Locale;
const submission = await prisma.submission.findUnique({ const session = await auth();
where: { const userId = session?.user?.id;
id: submissionId,
}, const submission = userId
}); ? await prisma.submission.findFirst({
const judge = await prisma.judge.findUnique({ where: {
where: { submissionId }, id: submissionId,
select: { userId,
compileOutput: true, },
}, })
}); : null;
if (!submission) if (!submission)
return ( return (
@ -41,6 +42,13 @@ export const DetailTable = async ({ submissionId }: DetailTableProps) => {
</div> </div>
); );
const judge = await prisma.judge.findUnique({
where: { submissionId },
select: {
compileOutput: true,
},
});
const createdAt = new Date(submission.createdAt); const createdAt = new Date(submission.createdAt);
const submittedDisplay = formatSubmissionDate(createdAt, locale); const submittedDisplay = formatSubmissionDate(createdAt, locale);

View File

@ -46,7 +46,7 @@ export const SubmissionContent = async ({
return userId ? ( return userId ? (
<div className="px-3"> <div className="px-3">
<SubmissionTable problemId={problemId} /> <SubmissionTable problemId={problemId} userId={userId} />
</div> </div>
) : ( ) : (
<LoginPromptCard /> <LoginPromptCard />

View File

@ -11,13 +11,17 @@ import { SubmissionTableRow } from "@/features/problems/submission/components/ro
interface SubmissionTableProps { interface SubmissionTableProps {
problemId: string; problemId: string;
userId: string;
} }
export const SubmissionTable = async ({ problemId }: SubmissionTableProps) => { export const SubmissionTable = async ({
problemId,
userId,
}: SubmissionTableProps) => {
const t = await getTranslations("SubmissionsTable"); const t = await getTranslations("SubmissionsTable");
const submissions = await prisma.submission.findMany({ const submissions = await prisma.submission.findMany({
where: { problemId }, where: { problemId, userId },
orderBy: { createdAt: "desc" }, orderBy: { createdAt: "desc" },
}); });