feat: getrennte Login-Seiten für User (/), Admins (/admin/login)
- /admin/login: neue Login-Seite nur für auditor, admin, domain_admin, superadmin - /: blockiert Admin-Rollen mit Hinweis auf /admin - useAuth: neuer loginPage-Parameter für flexiblen Unauthentifiziert-Redirect - /admin: leitet bei Nicht-Auth zu /admin/login statt / Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
c1a9004720
commit
acc0d93318
+9
-3
@@ -16,13 +16,15 @@ export default function LoginPage() {
|
||||
const [error, setError] = useState("");
|
||||
const [loading, setLoading] = useState(false);
|
||||
|
||||
const ADMIN_ROLES = ["auditor", "admin", "domain_admin", "superadmin"];
|
||||
|
||||
useEffect(() => {
|
||||
// Only redirect if we have a cached session — no API call, no loop risk
|
||||
const cached = getCachedUser();
|
||||
if (cached !== null) {
|
||||
router.replace(cached.role === "superadmin" ? "/admin" : "/search");
|
||||
router.replace(ADMIN_ROLES.includes(cached.role) ? "/admin/login" : "/search");
|
||||
}
|
||||
}, [router]);
|
||||
}, [router]); // eslint-disable-line react-hooks/exhaustive-deps
|
||||
|
||||
async function handleSubmit(e: React.FormEvent) {
|
||||
e.preventDefault();
|
||||
@@ -32,7 +34,11 @@ export default function LoginPage() {
|
||||
try {
|
||||
const res = await login(username, password);
|
||||
const role = res?.user?.role ?? "";
|
||||
router.push(role === "superadmin" ? "/admin" : "/search");
|
||||
if (ADMIN_ROLES.includes(role)) {
|
||||
setError("Admins und Auditoren bitte über /admin anmelden.");
|
||||
return;
|
||||
}
|
||||
router.push("/search");
|
||||
} catch {
|
||||
setError("Anmeldung fehlgeschlagen. Bitte Zugangsdaten pruefen.");
|
||||
} finally {
|
||||
|
||||
Reference in New Issue
Block a user