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:
10
CHANGELOG.md
10
CHANGELOG.md
@@ -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
|
## [1.6.402] – 2025-05-13
|
||||||
|
|
||||||
### Fix
|
### Fix
|
||||||
|
|||||||
@@ -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.
|
- 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**.
|
- 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.
|
> 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.
|
||||||
|
|
||||||
|
|||||||
@@ -9,12 +9,15 @@ import React, { useState, useEffect } from "react";
|
|||||||
import { useSelector } from "react-redux";
|
import { useSelector } from "react-redux";
|
||||||
import { RootState } from "../../../../../redux/store";
|
import { RootState } from "../../../../../redux/store";
|
||||||
|
|
||||||
|
import { useAdminAuth } from "../../../settingsPageComponents/hooks/useAdminAuth";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
slot: number;
|
slot: number;
|
||||||
onClose?: () => void; // ← NEU
|
onClose?: () => void; // ← NEU
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function TdrEinstellung({ slot, onClose }: Props) {
|
export default function TdrEinstellung({ slot, onClose }: Props) {
|
||||||
|
const { isAdminLoggedIn } = useAdminAuth(true);
|
||||||
const tdrSlice = useSelector((state: RootState) => state.kueDataSlice);
|
const tdrSlice = useSelector((state: RootState) => state.kueDataSlice);
|
||||||
|
|
||||||
const cacheKey = `slot_${slot}`;
|
const cacheKey = `slot_${slot}`;
|
||||||
@@ -162,6 +165,7 @@ export default function TdrEinstellung({ slot, onClose }: Props) {
|
|||||||
return (
|
return (
|
||||||
<div className="p-4 text-sm">
|
<div className="p-4 text-sm">
|
||||||
{/* TDR-Funktion */}
|
{/* TDR-Funktion */}
|
||||||
|
{isAdminLoggedIn && (
|
||||||
<div className="mb-4 mt-4 grid grid-cols-3 items-center gap-2 w-full">
|
<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>
|
<span className="text-sm font-medium">TDR-Funktion:</span>
|
||||||
<div className="col-span-2 flex items-center gap-4">
|
<div className="col-span-2 flex items-center gap-4">
|
||||||
@@ -185,6 +189,7 @@ export default function TdrEinstellung({ slot, onClose }: Props) {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
<div className="mt-6 mb-4">
|
<div className="mt-6 mb-4">
|
||||||
<div className="mb-4 grid grid-cols-3 items-center gap-2 w-full">
|
<div className="mb-4 grid grid-cols-3 items-center gap-2 w-full">
|
||||||
|
|||||||
@@ -6,5 +6,5 @@
|
|||||||
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
|
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
|
||||||
|
|
||||||
*/
|
*/
|
||||||
const webVersion = "1.6.402";
|
const webVersion = "1.6.403";
|
||||||
export default webVersion;
|
export default webVersion;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ export const goTDR = async (
|
|||||||
// 🚀 ECHTER Backend-Aufruf über CGI
|
// 🚀 ECHTER Backend-Aufruf über CGI
|
||||||
try {
|
try {
|
||||||
const response = await fetch(
|
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",
|
method: "GET",
|
||||||
}
|
}
|
||||||
@@ -39,7 +39,7 @@ export const goTDR = async (
|
|||||||
|
|
||||||
if (response.ok) {
|
if (response.ok) {
|
||||||
alert(
|
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);
|
console.log("TDR erfolgreich gestartet für Slot", slotIndex + 1);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user