datacops-cms
Version:
A modern, extensible CMS built with Next.js and Prisma.
53 lines (43 loc) • 1.7 kB
text/typescript
/* eslint-disable @typescript-eslint/no-explicit-any */
import { NextRequest, NextResponse } from "next/server";
import fs from "fs";
import path from "path";
const PERMISSIONS_DIR = path.resolve(process.cwd(), "content");
const PERMISSIONS_PATH = path.join(PERMISSIONS_DIR, "api-permissions.json");
function readPermissions()
{
if (!fs.existsSync(PERMISSIONS_PATH)) return {};
return JSON.parse(fs.readFileSync(PERMISSIONS_PATH, "utf-8"));
}
export async function GET()
{
return NextResponse.json(readPermissions());
}
export async function POST(req: NextRequest)
{
const { type, permissions } = await req.json();
// Ensure the folder exists
if (!fs.existsSync(PERMISSIONS_DIR)) {
fs.mkdirSync(PERMISSIONS_DIR, { recursive: true });
}
const data = readPermissions();
data[type] = permissions;
fs.writeFileSync(PERMISSIONS_PATH, JSON.stringify(data, null, 2));
return NextResponse.json({ success: true });
}
// Set default permissions for a new type
export function ensurePermissionForType(type: string)
{
// Ensure directory exists
if (!fs.existsSync(PERMISSIONS_DIR)) fs.mkdirSync(PERMISSIONS_DIR, { recursive: true });
let data: { [key: string]: any } = {};
if (fs.existsSync(PERMISSIONS_PATH)) {
data = JSON.parse(fs.readFileSync(PERMISSIONS_PATH, "utf-8"));
}
// If type already exists, do not override
if (!(type in data)) {
// All permissions false by default
data[type] = { GET: false, POST: false, PUT: false, PATCH: false, DELETE: false };
fs.writeFileSync(PERMISSIONS_PATH, JSON.stringify(data, null, 2));
}
}