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).
This commit is contained in:
Giuseppe Lombardo 2026-08-13 10:08:17 +00:00
parent a8dc999180
commit 0179517979

View File

@ -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,
});