fix: Superadmin wird direkt zu /admin weitergeleitet

- Login: superadmin → /admin, alle anderen → /search
- Cached-Session: superadmin → /admin
- Search-Seite: superadmin wird sofort zu /admin umgeleitet

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
sysops
2026-03-31 10:05:08 +02:00
parent 27040ffcb1
commit 842640c3aa
2 changed files with 14 additions and 5 deletions
+6 -4
View File
@@ -18,8 +18,9 @@ export default function LoginPage() {
useEffect(() => { useEffect(() => {
// Only redirect if we have a cached session — no API call, no loop risk // Only redirect if we have a cached session — no API call, no loop risk
if (getCachedUser() !== null) { const cached = getCachedUser();
router.replace("/search"); if (cached !== null) {
router.replace(cached.role === "superadmin" ? "/admin" : "/search");
} }
}, [router]); }, [router]);
@@ -29,8 +30,9 @@ export default function LoginPage() {
setLoading(true); setLoading(true);
try { try {
await login(username, password); const res = await login(username, password);
router.push("/search"); const role = res?.user?.role ?? "";
router.push(role === "superadmin" ? "/admin" : "/search");
} catch { } catch {
setError("Anmeldung fehlgeschlagen. Bitte Zugangsdaten pruefen."); setError("Anmeldung fehlgeschlagen. Bitte Zugangsdaten pruefen.");
} finally { } finally {
+8 -1
View File
@@ -114,9 +114,16 @@ export default function SearchPage() {
[query, fromFilter, toFilter, dateFrom, dateTo, sort, hasAttachment, selectedLabelId] [query, fromFilter, toFilter, dateFrom, dateTo, sort, hasAttachment, selectedLabelId]
); );
// Superadmin has no mail access — redirect to admin dashboard
useEffect(() => {
if (user?.role === "superadmin") {
router.replace("/admin");
}
}, [user, router]);
// Alle Mails beim Öffnen der Seite laden — direkt, ohne useCallback-Closure // Alle Mails beim Öffnen der Seite laden — direkt, ohne useCallback-Closure
useEffect(() => { useEffect(() => {
if (!user) return; if (!user || user.role === "superadmin") return;
setSearching(true); setSearching(true);
searchEmails({ page: 1, page_size: PAGE_SIZE }) searchEmails({ page: 1, page_size: PAGE_SIZE })
.then((res) => { .then((res) => {