26 lines
1.1 KiB
TypeScript
26 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 });
|
|
});
|