import { createPermission, deletePermission, updatePermission, } from "@/actions/admin-permissions"; import { StatusCard } from "@/components/admin/dashboard"; import { prisma } from "@/lib/prisma"; import { Shield } from "lucide-react"; import { getTranslations } from "next-intl/server"; export const dynamic = "force-dynamic"; // Manages website_permissions (model WebsitePermissions) — the CMS-owned // permission -> minimum-rank mapping. Each row names a permission and the lowest // rank allowed to use it, with an optional description. type PermissionRow = { id: bigint; permission: string; minRank: number; description: string | null; }; export default async function AdminPermissions() { const t = await getTranslations("pages.admin.permissions"); let permissions: PermissionRow[] = []; try { permissions = await prisma.websitePermissions.findMany({ select: { id: true, permission: true, minRank: true, description: true }, orderBy: { minRank: "asc" }, take: 500, }); } catch { permissions = []; } const highestRank = permissions.reduce((max, p) => Math.max(max, p.minRank), 0); return (

{t("title")}

{t("subtitle")}

{t("addPermission")}

{t("permissions")} ({permissions.length})

{permissions.length === 0 ? (
{t("noPermissions")}
) : (
{permissions.map((p) => ( ))}
{t("colId")} {t("colPermission")} {t("colMinRank")} {t("colDescription")}
{String(p.id)}
)}
); }