From 6feada4fd82aa1a879dc4691b4153bd5137a7349 Mon Sep 17 00:00:00 2001 From: David Gwilliam Date: Mon, 30 Mar 2026 21:30:50 -0700 Subject: [PATCH] refactor: use permission system instead of direct session checks in admin pages --- src/app/admin/tournaments/[id]/page.tsx | 23 +++++-------- src/app/admin/tournaments/page.tsx | 45 +++++++++---------------- 2 files changed, 24 insertions(+), 44 deletions(-) diff --git a/src/app/admin/tournaments/[id]/page.tsx b/src/app/admin/tournaments/[id]/page.tsx index 3ab8325..20754a7 100644 --- a/src/app/admin/tournaments/[id]/page.tsx +++ b/src/app/admin/tournaments/[id]/page.tsx @@ -2,7 +2,7 @@ import { prisma } from "@/lib/prisma" import Navigation from "@/components/Navigation" import Link from "next/link" import { notFound, redirect } from "next/navigation" -import { getSession } from "@/lib/auth-simple" +import { canManageTournament, hasRole } from "@/lib/permissions" import { getTournamentStatus } from "@/lib/tournamentUtils" interface PageProps { @@ -12,21 +12,16 @@ interface PageProps { } export default async function TournamentDetailPage({ params }: PageProps) { - const session = await getSession() - - if (!session) { + const tournamentId = parseInt(params.id) + + // Check if user can manage this tournament + const permission = await canManageTournament(tournamentId) + if (!permission.allowed) { redirect("/auth/login") } - // Fetch user role from database - const user = await prisma.user.findUnique({ - where: { id: session.user.id }, - select: { role: true }, - }); - - const isAdmin = user?.role === "club_admin" - - const tournamentId = parseInt(params.id) + // Check if user can create tournaments (tournament_admin or club_admin) + const canCreate = await hasRole('tournament_admin') let tournament = await prisma.event.findUnique({ where: { id: tournamentId }, @@ -158,7 +153,7 @@ export default async function TournamentDetailPage({ params }: PageProps) { )}
- {isAdmin && ( + {permission.allowed && ( <>

- {isAdmin ? 'Tournament Management' : 'Tournaments'} + {canCreate ? 'Tournament Management' : 'Tournaments'}

- {isAdmin && ( + {canCreate && ( View - {isAdmin && ( - - Edit - - )} + + Edit + ))} @@ -149,7 +134,7 @@ export default async function AdminTournamentsPage() { {updatedTournaments.length === 0 && (

No tournaments found.

- {isAdmin && ( + {canCreate && (