Fix: Admin Permission Cancel Bug fixed
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user