From 0179517979b3a325daaa2773a93c6089dc840d47 Mon Sep 17 00:00:00 2001 From: bernd Date: Thu, 13 Aug 2026 10:08:17 +0000 Subject: [PATCH] Scope inventory list to own room + shared items for tenants Tenants could previously see every other tenant's private room inventory including purchase prices. Now matches the app's standard visibility rule: own room + roomId=NULL (shared) items only; landlord/ admin unchanged (see everything). --- backend/src/routes/inventory.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/backend/src/routes/inventory.ts b/backend/src/routes/inventory.ts index 16018c3..e8e955a 100644 --- a/backend/src/routes/inventory.ts +++ b/backend/src/routes/inventory.ts @@ -7,8 +7,10 @@ const prisma = new PrismaClient(); /** * Router für die Inventarverwaltung (Möbel & Geräte je Zimmer bzw. * Gemeinschaftsfläche). Anlegen/Ändern/Löschen ist Vermieter/Admin - * vorbehalten; die Liste selbst ist für alle eingeloggten Nutzer sichtbar - * (z. B. damit Mieter nachschauen können, was zu welchem Zimmer gehört). + * vorbehalten. Sichtbarkeit wie überall sonst: Mieter sehen nur Inventar + * ihres eigenen Zimmers plus echte Gemeinschaftsgegenstände (roomId NULL), + * nicht das private Zimmerinventar (inkl. Kaufpreis) anderer Mieter. + * Vermieter/Admin sehen alles. * * Pro Gegenstand können mehrere Fotos hinterlegt werden (photoUrls) — das * Web-Dashboard sendet dafür clientseitig eingelesene Bilder als Data-URLs, @@ -39,8 +41,16 @@ function sanitizePhotoUrls(input: unknown): string[] { .map((u) => (u as string).trim()); } -inventoryRouter.get('/inventory', requireAuth, async (_req: AuthedRequest, res: Response) => { +inventoryRouter.get('/inventory', requireAuth, async (req: AuthedRequest, res: Response) => { + const isLandlord = req.user!.role === 'LANDLORD' || req.user!.role === 'ADMIN'; + let where = {}; + if (!isLandlord) { + const self = await prisma.user.findUnique({ where: { id: req.user!.id }, select: { roomId: true } }); + where = { OR: [{ roomId: null }, { roomId: self?.roomId ?? '__none__' }] }; + } + const items = await prisma.inventory.findMany({ + where, orderBy: { createdAt: 'desc' }, select: INVENTORY_SELECT, });