Reapply "Add missing admin action files and navigation links"
This reverts commit 4d515bc400.
This commit is contained in:
1 parent
96ed768f14
commit
5b4228261a
338 files changed
+28143
-5948
No files matched your search
@@ -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>
|
||||
)
|
||||
}
|
||||
Reference in new issue
Block a user