fix(backend): IDOR in POST /notifications/:id/read (Modul 26)

markRead() pruefte bisher nicht, ob die Benachrichtigung dem
anfragenden Nutzer gehoert - jeder authentifizierte Nutzer konnte
fremde Benachrichtigungen als gelesen markieren. Jetzt: 403 bei
fremder Benachrichtigung, weiterhin erlaubt fuer eigene und
Broadcast-Benachrichtigungen (userId = null). E2E-Regressionstest
ergaenzt.
This commit is contained in:
Nick Szaunig committed 2026-08-22 22:50:00 +02:00
1 parent a57cde1f9a
commit 75f0d4fd51
4 files changed
+64 -11

No files matched your search

@@ -1,4 +1,8 @@
import { Injectable, NotFoundException } from '@nestjs/common';
import {
ForbiddenException,
Injectable,
NotFoundException,
} from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';
import { Notification, NotificationPriority } from '../../generated/prisma';
@@ -36,13 +40,16 @@ export class NotificationsService {
});
}
async markRead(id: string): Promise<Notification> {
async markRead(id: string, actingUserId: string): Promise<Notification> {
const notification = await this.prisma.notification.findUnique({
where: { id },
});
if (!notification) {
throw new NotFoundException('Notification not found');
}
if (notification.userId !== null && notification.userId !== actingUserId) {
throw new ForbiddenException("Cannot modify another user's notification");
}
return this.prisma.notification.update({
where: { id },
data: { read: true },