From 21befd0e5b2f7c8d5715ea43c4c726cc5dcd9184 Mon Sep 17 00:00:00 2001 From: Madhura68 Date: Sun, 26 Apr 2026 16:03:32 +0200 Subject: [PATCH] =?UTF-8?q?feat(ST-350):=20add=20auth=20helpers=20?= =?UTF-8?q?=E2=80=94=20getSession,=20requireUser,=20requireWriter,=20requi?= =?UTF-8?q?reProductAccess,=20requireProductWriter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- lib/auth.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/lib/auth.ts b/lib/auth.ts index d494ed1..52cede1 100644 --- a/lib/auth.ts +++ b/lib/auth.ts @@ -1,5 +1,39 @@ import bcrypt from 'bcryptjs' +import { getIronSession } from 'iron-session' +import { cookies } from 'next/headers' import { prisma } from '@/lib/prisma' +import { SessionData, sessionOptions } from '@/lib/session' +import { getAccessibleProduct } from '@/lib/product-access' + +export async function getSession() { + return getIronSession(await cookies(), sessionOptions) +} + +export async function requireUser() { + const session = await getSession() + if (!session.userId) throw new Error('Niet ingelogd') + return session +} + +export async function requireWriter() { + const session = await requireUser() + if (session.isDemo) throw new Error('Niet beschikbaar in demo-modus') + return session.userId +} + +export async function requireProductAccess(productId: string) { + const session = await requireUser() + const product = await getAccessibleProduct(productId, session.userId) + if (!product) throw new Error('Product niet gevonden of geen toegang') + return product +} + +export async function requireProductWriter(productId: string) { + const userId = await requireWriter() + const product = await getAccessibleProduct(productId, userId) + if (!product) throw new Error('Product niet gevonden of geen toegang') + return product +} export async function registerUser(username: string, password: string) { const existing = await prisma.user.findUnique({ where: { username } })