diff --git a/app/features/calendar/calendar-utils.server.ts b/app/features/calendar/calendar-utils.server.ts new file mode 100644 index 000000000..9f5242826 --- /dev/null +++ b/app/features/calendar/calendar-utils.server.ts @@ -0,0 +1,9 @@ +import { isAdmin } from "~/permissions"; + +const usersWithTournamentPerms = + process.env["TOURNAMENT_PERMS"]?.split(",").map(Number) ?? []; +export function canCreateTournament(user?: { id: number }) { + if (!user) return false; + + return isAdmin(user) || usersWithTournamentPerms.includes(user.id); +} diff --git a/app/features/calendar/routes/calendar.new.tsx b/app/features/calendar/routes/calendar.new.tsx index 124593b37..18f613d49 100644 --- a/app/features/calendar/routes/calendar.new.tsx +++ b/app/features/calendar/routes/calendar.new.tsx @@ -33,11 +33,10 @@ import type { } from "~/db/types"; import { useIsMounted } from "~/hooks/useIsMounted"; import { useTranslation } from "react-i18next"; -import { useUser } from "~/features/auth/core"; import { requireUser } from "~/features/auth/core/user.server"; import { i18next } from "~/modules/i18n"; import { MapPool } from "~/features/map-list-generator/core/map-pool"; -import { canEditCalendarEvent, canEnableTOTools } from "~/permissions"; +import { canEditCalendarEvent } from "~/permissions"; import calendarNewStyles from "~/styles/calendar-new.css"; import mapsStyles from "~/styles/maps.css"; import { isDefined } from "~/utils/arrays"; @@ -72,6 +71,7 @@ import { rankedModesShort } from "~/modules/in-game-lists/modes"; import * as BadgeRepository from "~/features/badges/BadgeRepository.server"; import * as CalendarRepository from "~/features/calendar/CalendarRepository.server"; import { canAddNewEvent } from "../calendar-utils"; +import { canCreateTournament } from "../calendar-utils.server"; const MIN_DATE = new Date(Date.UTC(2015, 4, 28)); @@ -182,7 +182,7 @@ export const action: ActionFunction = async ({ request }) => { .join(",") : data.tags, badges: data.badges ?? [], - toToolsEnabled: canEnableTOTools(user) ? Number(data.toToolsEnabled) : 0, + toToolsEnabled: canCreateTournament(user) ? Number(data.toToolsEnabled) : 0, toToolsMode: rankedModesShort.find((mode) => mode === data.toToolsMode) ?? null, }; @@ -262,11 +262,12 @@ export const loader = async ({ request }: LoaderFunctionArgs) => { } : undefined, title: makeTitle([canEditEvent ? "Edit" : "New", t("pages.calendar")]), + canCreateTournament: canCreateTournament(user), }); }; export default function CalendarNewEventPage() { - const user = useUser(); + const data = useLoaderData(); const { t } = useTranslation(); const { eventToEdit } = useLoaderData(); const [isTournament, setIsTournament] = React.useState( @@ -285,7 +286,7 @@ export default function CalendarNewEventPage() { )} - {canEnableTOTools(user) && !eventToEdit && ( + {data.canCreateTournament && !eventToEdit && ( ; tournament: TournamentRepository.FindById;