added backup and email client

This commit is contained in:
2026-02-01 00:02:35 +01:00
parent ef18381dd8
commit 8c9e61cf17
210 changed files with 24211 additions and 742 deletions
+30 -15
View File
@@ -7,7 +7,7 @@ import Button from '../../components/ui/Button';
import Input from '../../components/ui/Input';
import Modal from '../../components/ui/Modal';
import Badge from '../../components/ui/Badge';
import { Plus, Edit, Trash2, Search, Code, AlertTriangle, ArrowLeft } from 'lucide-react';
import { Plus, Edit, Trash2, Search, Code, AlertTriangle, ArrowLeft, Info } from 'lucide-react';
import { Link } from 'react-router-dom';
import type { User, Role } from '../../types';
@@ -89,6 +89,13 @@ export default function UserList() {
</div>
</Card>
<div className="mb-6 bg-blue-50 border border-blue-200 rounded-lg p-4 flex items-start gap-3">
<Info className="w-5 h-5 text-blue-600 flex-shrink-0 mt-0.5" />
<div className="text-sm text-blue-800">
<strong>Hinweis:</strong> Bei Änderungen an Rollen oder Berechtigungen wird der betroffene Benutzer automatisch ausgeloggt und muss sich erneut anmelden.
</div>
</div>
<Card>
{isLoading ? (
<div className="text-center py-8 text-gray-500">Laden...</div>
@@ -305,6 +312,7 @@ function UserModal({
firstName: formData.firstName,
lastName: formData.lastName,
roleIds: formData.roleIds,
hasDeveloperAccess: formData.hasDeveloperAccess,
});
}
};
@@ -381,20 +389,7 @@ function UserModal({
)}
</label>
))}
</div>
</div>
{user && (
<div className="space-y-3 pt-3 border-t">
<label className="flex items-center gap-2">
<input
type="checkbox"
checked={formData.isActive}
onChange={(e) => setFormData({ ...formData, isActive: e.target.checked })}
className="rounded"
/>
Aktiv
</label>
{/* Entwicklerzugriff direkt unter den Rollen */}
<label className="flex items-center gap-2">
<input
type="checkbox"
@@ -409,6 +404,26 @@ function UserModal({
<span className="text-sm text-gray-500">(Datenbanktools)</span>
</label>
</div>
{user && (
<p className="mt-2 text-xs text-amber-600 flex items-center gap-1">
<AlertTriangle className="w-3 h-3" />
Bei Rollenänderung wird der Benutzer automatisch ausgeloggt.
</p>
)}
</div>
{user && (
<div className="space-y-3 pt-3 border-t">
<label className="flex items-center gap-2">
<input
type="checkbox"
checked={formData.isActive}
onChange={(e) => setFormData({ ...formData, isActive: e.target.checked })}
className="rounded"
/>
Aktiv
</label>
</div>
)}
<div className="flex justify-end gap-2">