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({
where: { submissionId: submissionId },
const analysis = await prisma.codeAnalysis.findFirst({
where: {
submissionId,
submission: {
userId: session.user.id,
},
},
});
if (!analysis) {

View File

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

View File

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

View File

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