feat: JWT-basierte Token-Generierung und -Validierung für rollenbasierte UI-Zugriffe hinzugefügt

- `generateToken`-Funktion implementiert, um Tokens mit Benutzerrollen zu erstellen
- `decodeToken` in `KueModal` hinzugefügt, um das Token zu dekodieren und den "Firmware Update"-Button für Admin-Rolle bedingt anzuzeigen
- Fehlerbehandlung für ungültige Tokens in localStorage verbessert
- Sicherstellung der Token-Dekodierung für Admin-Zugriffskontrolle in Entwicklungs- und Produktionsumgebung
This commit is contained in:
ISA
2024-11-13 11:55:48 +01:00
parent e77340b2fb
commit 8412d0b9c2
6 changed files with 266 additions and 63 deletions

View File

@@ -8,7 +8,18 @@ import handleSave from "./handlers/handleSave";
import handleDisplayEinschalten from "./handlers/handleDisplayEinschalten";
import handleChange from "./handlers/handleChange";
function decodeToken(token) {
try {
const payload = JSON.parse(atob(token)); // Direkt das Token decodieren
return payload;
} catch (error) {
console.error("Fehler beim Dekodieren des Tokens:", error);
return null;
}
}
function KueModal({ showModal, onClose, slot, onModulNameChange }) {
const [isAdmin, setIsAdmin] = useState(false);
const dispatch = useDispatch();
const [ids, setIds] = useState(Array(32).fill("---"));
const [bezeichnungen, setBezeichnungen] = useState(Array(32).fill("---"));
@@ -84,6 +95,16 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
}
}, [showModal]); // nur von showModal abhängig ansonsten wird alle 10 Sekunden die Werte zurückgesetzt in Modal
//------------------------------------------------------------------------------------------------------------
useEffect(() => {
const token = localStorage.getItem("token");
if (token) {
const decoded = decodeToken(token);
if (decoded && decoded.role === "Admin") {
setIsAdmin(true);
}
}
}, [showModal]);
//------------------------------------------------------------------------------------------------------------
return (
<ReactModal
isOpen={showModal}
@@ -219,6 +240,12 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
</div>
<div className="flex justify-end bg-gray-100 p-4 rounded-b-lg">
{/* Bedingte Anzeige der Firmware-Update-Schaltfläche */}
{isAdmin && (
<button className="bg-littwin-blue text-white p-2 rounded flex items-center mr-2">
Firmware Update
</button>
)}
<button
onClick={handleDisplayEinschaltenWrapper}
className="bg-littwin-blue text-white p-2 rounded flex items-center mr-2"