Merge pull request 'Fix: Admin Permission Cancel Bug fixed' (#9) from fix/adminPermissionCancel-Bug into development
Reviewed-on: #9
This commit is contained in:
@@ -28,6 +28,7 @@ const Users = () => {
|
|||||||
groupIds: []
|
groupIds: []
|
||||||
})
|
})
|
||||||
const [showAdminWarning, setShowAdminWarning] = useState(false)
|
const [showAdminWarning, setShowAdminWarning] = useState(false)
|
||||||
|
const [pendingAdminChange, setPendingAdminChange] = useState(null) // Speichert den vorherigen isAdmin Wert
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchUsers()
|
fetchUsers()
|
||||||
@@ -124,6 +125,7 @@ const Users = () => {
|
|||||||
setShowForm(false)
|
setShowForm(false)
|
||||||
setEditingUser(null)
|
setEditingUser(null)
|
||||||
setShowAdminWarning(false)
|
setShowAdminWarning(false)
|
||||||
|
setPendingAdminChange(null)
|
||||||
// Aktualisiere Berechtigungen nach Änderung an Benutzern (Gruppen-Zuweisungen könnten sich geändert haben)
|
// Aktualisiere Berechtigungen nach Änderung an Benutzern (Gruppen-Zuweisungen könnten sich geändert haben)
|
||||||
refreshPermissions()
|
refreshPermissions()
|
||||||
} else {
|
} else {
|
||||||
@@ -281,16 +283,27 @@ const Users = () => {
|
|||||||
|
|
||||||
const handleAdminToggle = (e) => {
|
const handleAdminToggle = (e) => {
|
||||||
const isAdmin = e.target.checked
|
const isAdmin = e.target.checked
|
||||||
|
const previousIsAdmin = formData.isAdmin
|
||||||
|
|
||||||
|
// Wenn Admin aktiviert wird, zeige Warnung und setze Wert NICHT sofort
|
||||||
if (isAdmin && !showAdminWarning) {
|
if (isAdmin && !showAdminWarning) {
|
||||||
|
// Speichere den vorherigen Wert
|
||||||
|
setPendingAdminChange(previousIsAdmin)
|
||||||
setShowAdminWarning(true)
|
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 => ({
|
setFormData(prev => ({
|
||||||
...prev,
|
...prev,
|
||||||
isAdmin,
|
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,
|
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) => {
|
const getPermissionLabel = (permission) => {
|
||||||
@@ -322,6 +335,7 @@ const Users = () => {
|
|||||||
setEditingUser(null)
|
setEditingUser(null)
|
||||||
setFormData({ username: '', email: '', oldPassword: '', password: '', confirmPassword: '', isAdmin: false, enabled: true, groupIds: [] })
|
setFormData({ username: '', email: '', oldPassword: '', password: '', confirmPassword: '', isAdmin: false, enabled: true, groupIds: [] })
|
||||||
setShowAdminWarning(false)
|
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"
|
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"
|
type="checkbox"
|
||||||
checked={formData.isAdmin || false}
|
checked={formData.isAdmin || false}
|
||||||
onChange={handleAdminToggle}
|
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"
|
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">
|
<div className="ml-3 flex-1">
|
||||||
@@ -550,6 +564,7 @@ const Users = () => {
|
|||||||
setEditingUser(null)
|
setEditingUser(null)
|
||||||
setFormData({ username: '', email: '', oldPassword: '', password: '', confirmPassword: '', isAdmin: false, enabled: true, groupIds: [] })
|
setFormData({ username: '', email: '', oldPassword: '', password: '', confirmPassword: '', isAdmin: false, enabled: true, groupIds: [] })
|
||||||
setShowAdminWarning(false)
|
setShowAdminWarning(false)
|
||||||
|
setPendingAdminChange(null)
|
||||||
setError('')
|
setError('')
|
||||||
}}
|
}}
|
||||||
className="px-6 py-2 bg-slate-600 hover:bg-slate-700 text-white font-semibold rounded-lg transition-colors duration-200"
|
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">
|
<div className="flex gap-3">
|
||||||
<button
|
<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"
|
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
|
Abbrechen
|
||||||
</button>
|
</button>
|
||||||
<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"
|
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
|
Verstanden, fortfahren
|
||||||
|
|||||||
Reference in New Issue
Block a user