diff --git a/frontend/src/pages/Users.jsx b/frontend/src/pages/Users.jsx index 69218e0..d1790ef 100644 --- a/frontend/src/pages/Users.jsx +++ b/frontend/src/pages/Users.jsx @@ -28,6 +28,7 @@ const Users = () => { groupIds: [] }) const [showAdminWarning, setShowAdminWarning] = useState(false) + const [pendingAdminChange, setPendingAdminChange] = useState(null) // Speichert den vorherigen isAdmin Wert useEffect(() => { fetchUsers() @@ -124,6 +125,7 @@ const Users = () => { setShowForm(false) setEditingUser(null) setShowAdminWarning(false) + setPendingAdminChange(null) // Aktualisiere Berechtigungen nach Änderung an Benutzern (Gruppen-Zuweisungen könnten sich geändert haben) refreshPermissions() } else { @@ -281,16 +283,27 @@ const Users = () => { const handleAdminToggle = (e) => { const isAdmin = e.target.checked + const previousIsAdmin = formData.isAdmin + + // Wenn Admin aktiviert wird, zeige Warnung und setze Wert NICHT sofort if (isAdmin && !showAdminWarning) { + // Speichere den vorherigen Wert + setPendingAdminChange(previousIsAdmin) setShowAdminWarning(true) + // Wert NICHT setzen - wird erst gesetzt wenn Benutzer bestätigt + // Checkbox bleibt visuell unverändert durch controlled component + return } + + // Wenn Admin deaktiviert wird (Checkbox wird abgewählt), setze sofort setFormData(prev => ({ ...prev, isAdmin, - // Wenn Admin aktiviert wird, entferne alle Gruppen und stelle sicher dass enabled=true + // Wenn Admin deaktiviert wird, Gruppen können wieder gesetzt werden groupIds: isAdmin ? [] : prev.groupIds, - enabled: isAdmin ? true : (prev.enabled !== undefined ? prev.enabled : true) // Admin muss immer enabled sein + enabled: isAdmin ? true : (prev.enabled !== undefined ? prev.enabled : true) })) + setPendingAdminChange(null) } const getPermissionLabel = (permission) => { @@ -322,6 +335,7 @@ const Users = () => { setEditingUser(null) setFormData({ username: '', email: '', oldPassword: '', password: '', confirmPassword: '', isAdmin: false, enabled: true, groupIds: [] }) setShowAdminWarning(false) + setPendingAdminChange(null) }} className="px-6 py-3 bg-blue-600 hover:bg-blue-700 text-white font-semibold rounded-lg shadow-lg hover:shadow-xl transition-all duration-200" > @@ -470,7 +484,7 @@ const Users = () => { type="checkbox" checked={formData.isAdmin || false} onChange={handleAdminToggle} - disabled={editingUser && editingUser.username === 'admin'} // Admin user kann seinen Status nicht ändern + disabled={editingUser && editingUser.id === 'admin'} // Admin user kann seinen Status nicht ändern className="mt-1 w-5 h-5 text-blue-600 bg-slate-700 border-slate-600 rounded focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 focus:ring-offset-slate-800 cursor-pointer" />
@@ -550,6 +564,7 @@ const Users = () => { setEditingUser(null) setFormData({ username: '', email: '', oldPassword: '', password: '', confirmPassword: '', isAdmin: false, enabled: true, groupIds: [] }) setShowAdminWarning(false) + setPendingAdminChange(null) setError('') }} className="px-6 py-2 bg-slate-600 hover:bg-slate-700 text-white font-semibold rounded-lg transition-colors duration-200" @@ -709,13 +724,31 @@ const Users = () => {