Fix: Admin Permission Cancel Bug fixed

This commit is contained in:
2025-11-22 03:20:14 +01:00
parent 2f2be739f2
commit 6623b07502

View File

@@ -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"
/>
<div className="ml-3 flex-1">
@@ -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 = () => {
<div className="flex gap-3">
<button
onClick={() => setShowAdminWarning(false)}
onClick={() => {
// Bei Abbrechen: Zurück zum vorherigen Wert
setFormData(prev => ({
...prev,
isAdmin: pendingAdminChange !== null ? pendingAdminChange : prev.isAdmin
}))
setPendingAdminChange(null)
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={() => setShowAdminWarning(false)}
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)
}}
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