Compare commits

..

1 Commits

Author SHA1 Message Date
3ea0ebae1b Merge pull request 'development' (#8) from development into main
Reviewed-on: #8
2025-11-21 23:33:13 +00:00

View File

@@ -28,7 +28,6 @@ const Users = () => {
groupIds: []
})
const [showAdminWarning, setShowAdminWarning] = useState(false)
const [pendingAdminChange, setPendingAdminChange] = useState(null) // Speichert den vorherigen isAdmin Wert
useEffect(() => {
fetchUsers()
@@ -125,7 +124,6 @@ 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 {
@@ -283,27 +281,16 @@ 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 deaktiviert wird, Gruppen können wieder gesetzt werden
// Wenn Admin aktiviert wird, entferne alle Gruppen und stelle sicher dass enabled=true
groupIds: isAdmin ? [] : prev.groupIds,
enabled: isAdmin ? true : (prev.enabled !== undefined ? prev.enabled : true)
enabled: isAdmin ? true : (prev.enabled !== undefined ? prev.enabled : true) // Admin muss immer enabled sein
}))
setPendingAdminChange(null)
}
const getPermissionLabel = (permission) => {
@@ -335,7 +322,6 @@ 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"
>
@@ -484,7 +470,7 @@ const Users = () => {
type="checkbox"
checked={formData.isAdmin || false}
onChange={handleAdminToggle}
disabled={editingUser && editingUser.id === 'admin'} // Admin user kann seinen Status nicht ändern
disabled={editingUser && editingUser.username === '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"
/>
<div className="ml-3 flex-1">
@@ -564,7 +550,6 @@ 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"
@@ -724,31 +709,13 @@ const Users = () => {
<div className="flex gap-3">
<button
onClick={() => {
// Bei Abbrechen: Zurück zum vorherigen Wert
setFormData(prev => ({
...prev,
isAdmin: pendingAdminChange !== null ? pendingAdminChange : prev.isAdmin
}))
setPendingAdminChange(null)
setShowAdminWarning(false)
}}
onClick={() => setShowAdminWarning(false)}
className="flex-1 px-4 py-2 bg-slate-600 hover:bg-slate-700 text-white font-semibold rounded-lg transition-colors duration-200"
>
Abbrechen
</button>
<button
onClick={() => {
// Bei Bestätigung: isAdmin auf true setzen und Modal schließen
setFormData(prev => ({
...prev,
isAdmin: true,
groupIds: [], // Gruppen entfernen wenn Admin aktiviert wird
enabled: true // Admin muss immer enabled sein
}))
setPendingAdminChange(null)
setShowAdminWarning(false)
}}
onClick={() => setShowAdminWarning(false)}
className="flex-1 px-4 py-2 bg-red-600 hover:bg-red-700 text-white font-semibold rounded-lg transition-colors duration-200"
>
Verstanden, fortfahren