fix(quick-260914-ebg): Zielrollen-Riegel in UserController.update/remove — ADMIN kann SUPER_ADMIN nicht mehr aendern oder loeschen (WINDOWS #29)
- update(): Riegel nach der Mandantengrenze, vor der dto.role-Pruefung — Nicht-SUPER_ADMIN darf SUPER_ADMIN-Ziel nicht mehr aendern (Kennwort, isActive, Rolle, Anmeldename, E-Mail) - remove(): derselbe Riegel nach der Mandantengrenze, vor userService.delete - acht neue Tests (Test 9-16): drei Angriffsformen, SUPER_ADMIN-gegen-SUPER_ADMIN-Regression, ADMIN-gegen-USER-Regression, Reihenfolge-Ordnungstests je Handler - RED-Lauf vor dem Riegel: Tests 2 failed | 14 passed (16) (Test 9, Test 13 rot); GREEN danach: Tests 16 passed (16) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018N9CD3ebPKm1b32bPpBknY
This commit is contained in:
@@ -188,6 +188,17 @@ export class UserController {
|
||||
throw new ForbiddenException('Cannot modify users from other tenants');
|
||||
}
|
||||
|
||||
// Zielrollen-Riegel (WINDOWS #29, 260914-ebg): die Pruefung unten sichert
|
||||
// nur die NEUE Zuweisung der obersten Rolle (dto.role) — dieser Riegel
|
||||
// sichert das ZIEL, das die oberste Rolle bereits traegt, gegen JEDES
|
||||
// Feld dieses DTO (Kennwort, isActive, Rolle, Anmeldename, E-Mail).
|
||||
// Vorlage: `AuthService.adminResetPassword` (T-FH9-04). Die
|
||||
// Mandantengrenze bleibt DAVOR, damit die Meldung nichts ueber die
|
||||
// Rolle eines fremdmandantigen Benutzers verraet (T-EBG-04).
|
||||
if (user.role === Role.SUPER_ADMIN && currentUser.role !== Role.SUPER_ADMIN) {
|
||||
throw new ForbiddenException('Cannot modify a SUPER_ADMIN user');
|
||||
}
|
||||
|
||||
// T-02-08: ADMIN cannot set role to SUPER_ADMIN
|
||||
if (currentUser.role !== Role.SUPER_ADMIN && dto.role === Role.SUPER_ADMIN) {
|
||||
throw new ForbiddenException('Cannot assign SUPER_ADMIN role');
|
||||
@@ -244,6 +255,13 @@ export class UserController {
|
||||
throw new ForbiddenException('Cannot delete users from other tenants');
|
||||
}
|
||||
|
||||
// Zielrollen-Riegel (WINDOWS #29, 260914-ebg): derselbe Riegel wie in
|
||||
// update() oben — ein Nicht-SUPER_ADMIN darf den SUPER_ADMIN seines
|
||||
// Mandanten nicht loeschen.
|
||||
if (user.role === Role.SUPER_ADMIN && currentUser.role !== Role.SUPER_ADMIN) {
|
||||
throw new ForbiddenException('Cannot delete a SUPER_ADMIN user');
|
||||
}
|
||||
|
||||
// Gebunden an den Mandanten des ZIELBENUTZERS, derselbe Grund wie bei
|
||||
// update() oben.
|
||||
await this.userService.delete(user.tenantId, id);
|
||||
|
||||
Reference in New Issue
Block a user