diff --git a/web-next/app/[locale]/account/page.tsx b/web-next/app/[locale]/account/page.tsx
index 3264bec..6c21e89 100644
--- a/web-next/app/[locale]/account/page.tsx
+++ b/web-next/app/[locale]/account/page.tsx
@@ -2,6 +2,7 @@ import { getTranslations, setRequestLocale } from 'next-intl/server'
import { redirect, Link } from '@/i18n/navigation'
import { getSession } from '@/lib/session'
import { getAccountDashboard } from '@/lib/account'
+import { isAdmin } from '@/lib/admin'
import { LogoutButton } from '@/components/LogoutButton'
export const dynamic = 'force-dynamic'
@@ -16,6 +17,7 @@ export default async function AccountPage({ params }: { params: Promise<{ locale
if (!session.username) redirect({ href: '/select-account', locale })
const data = await getAccountDashboard(session)
+ const admin = await isAdmin(session)
const card = 'nw-card'
@@ -26,6 +28,16 @@ export default async function AccountPage({ params }: { params: Promise<{ locale
+ {admin && (
+
+ 🛡️ {t('adminPanel')}
+ →
+
+ )}
+
diff --git a/web-next/lib/admin-users.ts b/web-next/lib/admin-users.ts
index 91b135e..a222843 100644
--- a/web-next/lib/admin-users.ts
+++ b/web-next/lib/admin-users.ts
@@ -20,7 +20,7 @@ export async function searchAccounts(query: string, limit = 30): Promise
(
`SELECT a.id, a.username, a.email, a.last_ip, a.last_login, a.online,
- (SELECT MAX(x.gmlevel) FROM account_access x WHERE x.id = a.id) AS gmlevel,
+ (SELECT MAX(x.SecurityLevel) FROM account_access x WHERE x.AccountID = a.id) AS gmlevel,
b.banreason AS ban_reason, b.bandate, b.unbandate
FROM account a
LEFT JOIN account_banned b ON b.id = a.id AND b.active = 1
diff --git a/web-next/lib/admin.ts b/web-next/lib/admin.ts
index f4f7552..139aecf 100644
--- a/web-next/lib/admin.ts
+++ b/web-next/lib/admin.ts
@@ -16,7 +16,7 @@ export async function isAdmin(session: SessionData): Promise {
try {
const level = Number(process.env.ADMIN_GMLEVEL || 3)
const [rows] = await db(DB.auth).query(
- 'SELECT gmlevel FROM account_access WHERE id = ? ORDER BY gmlevel DESC LIMIT 1',
+ 'SELECT SecurityLevel AS gmlevel FROM account_access WHERE AccountID = ? ORDER BY SecurityLevel DESC LIMIT 1',
[session.accountId ?? 0],
)
if (rows[0] && Number(rows[0].gmlevel) >= level) return true
diff --git a/web-next/lib/forum-perm.ts b/web-next/lib/forum-perm.ts
index c50f91f..6cd3dc8 100644
--- a/web-next/lib/forum-perm.ts
+++ b/web-next/lib/forum-perm.ts
@@ -10,7 +10,7 @@ export async function getGmlevel(accountId: number | undefined): Promise
if (!accountId) return 0
try {
const [rows] = await db(DB.auth).query(
- 'SELECT MAX(gmlevel) AS lvl FROM account_access WHERE id = ?',
+ 'SELECT MAX(SecurityLevel) AS lvl FROM account_access WHERE AccountID = ?',
[accountId],
)
return rows[0] && rows[0].lvl != null ? Number(rows[0].lvl) : 0
diff --git a/web-next/lib/forum.ts b/web-next/lib/forum.ts
index 7496971..dbfb40c 100644
--- a/web-next/lib/forum.ts
+++ b/web-next/lib/forum.ts
@@ -259,7 +259,7 @@ export async function getForumProfile(username: string): Promise {
if (acc[0]) {
profile.joindate = acc[0].joindate ? new Date(acc[0].joindate).toISOString() : null
const [ga] = await db(DB.auth).query(
- 'SELECT MAX(gmlevel) AS lvl FROM account_access WHERE id = ?',
+ 'SELECT MAX(SecurityLevel) AS lvl FROM account_access WHERE AccountID = ?',
[acc[0].id],
)
profile.gmlevel = ga[0]?.lvl != null ? Number(ga[0].lvl) : 0
diff --git a/web-next/messages/en.json b/web-next/messages/en.json
index 46d02f6..eeb30d2 100644
--- a/web-next/messages/en.json
+++ b/web-next/messages/en.json
@@ -80,7 +80,8 @@
"svcChangeEmail": "Change email",
"svcVote": "Vote (points)",
"svcRecruit": "Recruit a friend",
- "svcStore": "Store (Battlepay)"
+ "svcStore": "Store (Battlepay)",
+ "adminPanel": "Admin panel"
},
"SelectAccount": {
"title": "Select your game account",
diff --git a/web-next/messages/es.json b/web-next/messages/es.json
index 8f820ef..01e5e5e 100644
--- a/web-next/messages/es.json
+++ b/web-next/messages/es.json
@@ -80,7 +80,8 @@
"svcChangeEmail": "Cambiar email",
"svcVote": "Votar (puntos)",
"svcRecruit": "Recluta a un amigo",
- "svcStore": "Tienda (Battlepay)"
+ "svcStore": "Tienda (Battlepay)",
+ "adminPanel": "Panel de administraciĂłn"
},
"SelectAccount": {
"title": "Selecciona tu cuenta de juego",