Prevents slef delet

This commit is contained in:
sianida26 2024-02-14 15:05:29 +07:00
parent caab669d51
commit 8e7de074c1
2 changed files with 41 additions and 2 deletions

View File

@ -1,23 +1,37 @@
"use server"; "use server";
import prisma from "@/db"; import prisma from "@/db";
import getCurrentUser from "@/modules/auth/utils/getCurrentUser";
import checkPermission from "@/modules/dashboard/services/checkPermission"; import checkPermission from "@/modules/dashboard/services/checkPermission";
import ServerResponseAction from "@/modules/dashboard/types/ServerResponseAction"; import ServerResponseAction from "@/modules/dashboard/types/ServerResponseAction";
import handleCatch from "@/modules/dashboard/utils/handleCatch"; import handleCatch from "@/modules/dashboard/utils/handleCatch";
import notFound from "@/modules/dashboard/utils/notFound"; import notFound from "@/modules/dashboard/utils/notFound";
import unauthorized from "@/modules/dashboard/utils/unauthorized"; import unauthorized from "@/modules/dashboard/utils/unauthorized";
import { revalidatePath } from "next/cache"; import { revalidatePath } from "next/cache";
import UserManagementError from "../errors/UserManagementError";
export default async function deleteUser( export default async function deleteUser(
id: string id: string
): Promise<ServerResponseAction> { ): Promise<ServerResponseAction> {
try { try {
if (!(await checkPermission("users.delete"))) return unauthorized(); const currentUser = await getCurrentUser();
if (!(await checkPermission("users.delete")) || !currentUser)
return unauthorized();
//prevents self delete
if (currentUser.id === id) {
throw new UserManagementError({
errorCode: "CANNOT_DELETE_SELF",
message: "You cannot delete yourself",
});
}
const user = await prisma.user.delete({ const user = await prisma.user.delete({
where: { id }, where: { id },
}); });
if (!user) notFound({message: "The user does not exists"}); if (!user) notFound({ message: "The user does not exists" });
revalidatePath("."); revalidatePath(".");

View File

@ -0,0 +1,25 @@
import DashboardError from "@/modules/dashboard/errors/DashboardError";
export const UserManagementErrorCodes = [
"CANNOT_DELETE_SELF"
] as const;
interface UserManagementErrorOptions {
message?: string;
errorCode: (typeof UserManagementErrorCodes)[number] | (string & {});
formErrors?: Record<string, string>
}
export default class UserManagementError extends DashboardError {
public readonly errorCode: UserManagementErrorOptions['errorCode'];
public readonly formErrors?: UserManagementErrorOptions['formErrors']
constructor(options: UserManagementErrorOptions) {
super({
errorCode: options.errorCode,
message: options.message,
});
this.errorCode = options.errorCode;
}
}