From ae59e745c0e02d00c69329447cde0c2abc05cf57 Mon Sep 17 00:00:00 2001 From: noroot Date: Thu, 27 Aug 2026 19:06:05 +0200 Subject: [PATCH] fix: Admin nach Login direkt zum Admin-Bereich leiten MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ein Admin-Login hat kein eigenes Produkt zu prüfen — die Pre-Publish- Prüfung ("/") ist die Startseite für Mandanten (Creator/Agentur/Marke/ Kanzlei). Nutzer hat nach dem Login zu Recht gefragt, wieso ein Admin dieses Formular sieht. Login leitet role=admin jetzt direkt zu /admin, alle anderen Rollen weiterhin zu "/". --- internal/web/auth_handlers.go | 7 +++++++ internal/web/server_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/internal/web/auth_handlers.go b/internal/web/auth_handlers.go index 294bded..d676e72 100644 --- a/internal/web/auth_handlers.go +++ b/internal/web/auth_handlers.go @@ -96,6 +96,13 @@ func (s *Server) handleLogin(w http.ResponseWriter, r *http.Request) { s.renderAuthPage(w, "login", authPageData{Title: "Anmelden", Error: "Sitzung konnte nicht gestartet werden"}) return } + // Ein Admin-Login hat keinen eigenen Beitrag zu prüfen — die + // Pre-Publish-Prüfung ("/") ist die Startseite für Mandanten, für + // einen Admin ist der Admin-Bereich der sinnvolle Einstieg. + if user.Role == "admin" { + http.Redirect(w, r, "/admin", http.StatusSeeOther) + return + } http.Redirect(w, r, "/", http.StatusSeeOther) } diff --git a/internal/web/server_test.go b/internal/web/server_test.go index d4bb33e..ff97dc4 100644 --- a/internal/web/server_test.go +++ b/internal/web/server_test.go @@ -683,6 +683,30 @@ func TestLoginWithCorrectPassword(t *testing.T) { } } +func TestLoginRedirectsAdminToAdminDashboard(t *testing.T) { + fs := newFakeStore() + s := newServer(t, fakeExtractor{}, fs) + hash, err := auth.HashPassword("admin-passwort") + if err != nil { + t.Fatalf("HashPassword: %v", err) + } + acc, err := fs.CreateAccount(context.Background(), "Deklarix Admin") + if err != nil { + t.Fatalf("CreateAccount: %v", err) + } + if _, err := fs.CreateUser(context.Background(), acc.ID, "admin@example.com", hash, "admin"); err != nil { + t.Fatalf("CreateUser: %v", err) + } + + resp := postForm(t, s, nil, "/login", url.Values{"email": {"admin@example.com"}, "password": {"admin-passwort"}}) + if resp.Code != http.StatusSeeOther { + t.Fatalf("status = %d, want 303, body: %s", resp.Code, resp.Body.String()) + } + if loc := resp.Header().Get("Location"); loc != "/admin" { + t.Fatalf("Location = %q, want /admin for an admin login", loc) + } +} + func TestLoginRejectsWrongPassword(t *testing.T) { fs := newFakeStore() s := newServer(t, fakeExtractor{}, fs)