feat: TDR-Umschalter mit Admin-Login-Schutz versehen

- Der Schalter zum Aktivieren/Deaktivieren der TDR-Funktion ist nun nur für Admins sichtbar.
- Umsetzung über `useAdminAuth` analog zum Firmware-Update-Button.
- CHANGELOG.md und README.md entsprechend aktualisiert.
This commit is contained in:
ISA
2025-05-13 13:39:11 +02:00
parent 0096f65273
commit 0fdd7b1495
5 changed files with 41 additions and 24 deletions

View File

@@ -4,6 +4,16 @@ Alle Änderungen und Versionen des CPLv4.0 Frontends chronologisch dokumentiert.
---
## [1.6.403] 2025-05-13
### Sicherheit & UI
- Der Umschalter für die TDR-Aktivierung in `TdrEinstellung.tsx` wird jetzt nur noch angezeigt, wenn ein Admin eingeloggt ist.
- Damit wird verhindert, dass Standardnutzer oder Gäste versehentlich TDR-Funktionen aktivieren oder deaktivieren.
- Gleiche Logik wie beim „Firmware Update“-Button in `KueEinstellung.tsx` (`useAdminAuth`).
---
## [1.6.402] 2025-05-13
### Fix

View File

@@ -69,6 +69,8 @@ Die Benutzeroberfläche ist modular aufgebaut und ermöglicht Zugriff auf digita
- Beim Umschalten der TDR-Funktion (Ein/Aus) wird eine Bestätigung angezeigt.
- Nach Klick auf „OK“ wird die Seite automatisch neu geladen, da der neue TDR-Status aktuell **nicht sofort im UI aktualisiert wird**.
- Nur eingeloggte Admins können die TDR-Funktion aktivieren oder deaktivieren.
- Der Schalter wird im UI ausgeblendet, wenn kein Admin-Login erfolgt ist.
> Hinweis: Diese Lösung wurde aus Zeitgründen gewählt (Deadline), um eine stabile Anzeige sicherzustellen. Eine spätere Optimierung über Redux- und React-State-Handling ist vorgesehen.

View File

@@ -9,12 +9,15 @@ import React, { useState, useEffect } from "react";
import { useSelector } from "react-redux";
import { RootState } from "../../../../../redux/store";
import { useAdminAuth } from "../../../settingsPageComponents/hooks/useAdminAuth";
interface Props {
slot: number;
onClose?: () => void; // ← NEU
}
export default function TdrEinstellung({ slot, onClose }: Props) {
const { isAdminLoggedIn } = useAdminAuth(true);
const tdrSlice = useSelector((state: RootState) => state.kueDataSlice);
const cacheKey = `slot_${slot}`;
@@ -162,6 +165,7 @@ export default function TdrEinstellung({ slot, onClose }: Props) {
return (
<div className="p-4 text-sm">
{/* TDR-Funktion */}
{isAdminLoggedIn && (
<div className="mb-4 mt-4 grid grid-cols-3 items-center gap-2 w-full">
<span className="text-sm font-medium">TDR-Funktion:</span>
<div className="col-span-2 flex items-center gap-4">
@@ -185,6 +189,7 @@ export default function TdrEinstellung({ slot, onClose }: Props) {
</span>
</div>
</div>
)}
<div className="mt-6 mb-4">
<div className="mb-4 grid grid-cols-3 items-center gap-2 w-full">

View File

@@ -6,5 +6,5 @@
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
*/
const webVersion = "1.6.402";
const webVersion = "1.6.403";
export default webVersion;

View File

@@ -31,7 +31,7 @@ export const goTDR = async (
// 🚀 ECHTER Backend-Aufruf über CGI
try {
const response = await fetch(
`${window.location.origin}/CPL?Service/Kabelueberwachung.html&KTT${slotIndex}=1`,
`${window.location.origin}/CPL?kabelueberwachung.html&KTT${slotIndex}=1`,
{
method: "GET",
}
@@ -39,7 +39,7 @@ export const goTDR = async (
if (response.ok) {
alert(
`TDR Messung der KÜ705-FO Strecke ${slotIndex + 1} wurde durchgeführt`
`Die TDR-Messung wird durchgeführt. Das Messergebnis ist in wenigen Minuten verfügbar.`
);
console.log("TDR erfolgreich gestartet für Slot", slotIndex + 1);
} else {