39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import { revalidateTag } from "next/cache";
|
|
import { NextResponse } from "next/server";
|
|
import { withAdmin } from "@/lib/api-handler";
|
|
import { apiError } from "@/lib/api-response";
|
|
import { PERMS } from "@/lib/permissions";
|
|
import { prisma } from "@/lib/prisma";
|
|
|
|
export const POST = withAdmin(
|
|
{ permission: PERMS.PERMISSIONS_MANAGE },
|
|
async (request) => {
|
|
const body = await request.json();
|
|
const userId = Number(body.userId);
|
|
const roleId = Number(body.roleId);
|
|
if (
|
|
!Number.isInteger(userId) ||
|
|
userId <= 0 ||
|
|
!Number.isInteger(roleId) ||
|
|
roleId <= 0
|
|
) {
|
|
return apiError("Valid userId and roleId required", 400);
|
|
}
|
|
if (body.action === "remove") {
|
|
await prisma.aclModelRole.deleteMany({
|
|
where: { modelType: "User", modelId: userId, roleId },
|
|
});
|
|
} else {
|
|
const existing = await prisma.aclModelRole.findFirst({
|
|
where: { modelType: "User", modelId: userId, roleId },
|
|
});
|
|
if (!existing)
|
|
await prisma.aclModelRole.create({
|
|
data: { modelType: "User", modelId: userId, roleId },
|
|
});
|
|
}
|
|
revalidateTag("permissions", { expire: 0 });
|
|
return NextResponse.json({ success: true });
|
|
},
|
|
);
|