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:
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 },
|
||||
|
||||
Reference in new issue
Block a user