Prevents slef delet
This commit is contained in:
parent
caab669d51
commit
8e7de074c1
|
|
@ -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(".");
|
||||||
|
|
||||||
|
|
|
||||||
25
src/modules/userManagement/errors/UserManagementError.ts
Normal file
25
src/modules/userManagement/errors/UserManagementError.ts
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user