feat: Konto-Sicherheit gebündelt + Einstellungen aufgeräumt

- Neue Seite „Mein Konto" (/konto, für alle Nutzer): eigenes Passwort ändern
  (inkl. Richtlinien-Anzeige) + Zwei-Faktor verwalten; erreichbar über den
  Nutzer-Chip in der Seitenleisten-Fußzeile
- Einstellungen: 2FA-Karte entfernt (liegt jetzt bei „Mein Konto"), Karten in
  ein mehrspaltiges Raster gruppiert
- Menüpunkt „Einstellungen" unter die Überschrift „System" verschoben (für alle
  Nutzer sichtbar; „Benutzer" bleibt Admin-only)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-20 17:27:40 +02:00
co-authored by Claude Opus 4.8
parent 39bf7ea11c
commit 794a6aeb91
8 changed files with 234 additions and 102 deletions
+6 -8
View File
@@ -15,6 +15,7 @@ import Import from "./pages/Import";
import Users from "./pages/Users";
import Settings from "./pages/Settings";
import TwoFactor from "./pages/TwoFactor";
import Account from "./pages/Account";
const navClass = ({ isActive }) => (isActive ? "nav-link active" : "nav-link");
@@ -49,19 +50,15 @@ function Sidebar() {
<NavItem to="/buchungen" icon="arrow-left-right" label={t("nav.transactions")} />
<NavItem to="/budget" icon="pie-chart" label={t("nav.budget")} />
<NavItem to="/import" icon="download" label={t("nav.import")} />
<div className="nav-section">{t("nav.system")}</div>
<NavItem to="/settings" icon="settings" label={t("nav.settings")} />
{isAdmin && (
<>
<div className="nav-section">{t("nav.system")}</div>
<NavItem to="/users" icon="users" label={t("nav.users")} />
</>
)}
{isAdmin && <NavItem to="/users" icon="users" label={t("nav.users")} />}
</nav>
<div className="sidebar-foot">
<div className="sidebar-user">
<NavLink to="/konto" className="sidebar-user" title={t("account.title")}>
<span className="name">{user?.display_name || user?.username}</span>
<span className="role">{isAdmin ? t("common.admin") : t("common.user")}</span>
</div>
</NavLink>
<button className="btn-icon" onClick={handleLogout} title={t("common.logout")}>
<Icon name="logout" size={18} />
</button>
@@ -140,6 +137,7 @@ export default function App() {
<Route path="/budget" element={<Protected wide><Budget /></Protected>} />
<Route path="/import" element={<Protected wide><Import /></Protected>} />
<Route path="/settings" element={<Protected><Settings /></Protected>} />
<Route path="/konto" element={<Protected><Account /></Protected>} />
<Route path="/zwei-faktor" element={<Protected><TwoFactor /></Protected>} />
<Route path="/users" element={<Protected adminOnly><Users /></Protected>} />
<Route path="*" element={<Navigate to="/" replace />} />