Reapply "Add missing admin action files and navigation links"

This reverts commit 4d515bc400.
This commit is contained in:
Simo committed 2026-07-11 20:52:56 +02:00
1 parent 96ed768f14
commit 5b4228261a
338 files changed
+28143 -5948

No files matched your search

+75
View File
@@ -0,0 +1,75 @@
import { notFound, redirect } from 'next/navigation'
import { AdminBreadcrumb } from '@/components/admin/admin-breadcrumb'
import { getAdminContext } from '@/lib/permissions'
import { prisma } from '@/lib/prisma'
import { fetchEmulatorRankForEdit } from '@/lib/services/permission-ranks'
import { RankEditClient } from './rank-edit-client'
export default async function RankEditPage({
params,
}: {
params: Promise<{ locale: string; id: string }>
}) {
const { id: rawId } = await params
const { permissions } = await getAdminContext()
if (!permissions.isSuperAdmin) redirect('/admin')
const rankId = parseInt(rawId, 10)
if (Number.isNaN(rankId)) notFound()
const rank = await fetchEmulatorRankForEdit(prisma, rankId)
if (!rank) notFound()
// Fetch users with this rank (limit 200)
const users = await prisma.user.findMany({
where: { rank: rankId },
select: { id: true, username: true, look: true },
orderBy: { username: 'asc' },
take: 200,
})
const totalUsers = await prisma.user.count({ where: { rank: rankId } })
// Fetch all CMS permissions
const allCmsPermissions = await prisma.aclPermission.findMany({
orderBy: { slug: 'asc' },
})
// Auto-create CMS role for rank >= 4
let cmsRole: { id: number; slug: string; title: string; permissionSlugs: string[] } | null = null
if (rankId >= 4) {
const role = await prisma.aclRole.upsert({
where: { slug: `rank_${rankId}` },
create: { slug: `rank_${rankId}`, title: rank.rank_name || `Rank ${rankId}` },
update: {},
include: {
rolePermissions: { include: { permission: true } },
},
})
cmsRole = {
id: role.id,
slug: role.slug,
title: role.title,
permissionSlugs: role.rolePermissions.map((rp) => rp.permission.slug),
}
}
return (
<div className="space-y-6">
<AdminBreadcrumb
items={[
{ label: 'Permissions', href: '/admin/permissions' },
{ label: rank.rank_name || `Rank ${rankId}` },
]}
/>
<RankEditClient
rank={rank}
users={users}
totalUsers={totalUsers}
cmsRole={cmsRole}
allCmsPermissions={allCmsPermissions}
/>
</div>
)
}