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 }); }, );