From 745cbf9f2fe841e55c44b9009fbb47ac04837d6e Mon Sep 17 00:00:00 2001 From: nico Date: Thu, 12 Mar 2026 15:38:30 +0800 Subject: [PATCH] feat: redirect home to dashboard untuk user yang sudah login - Update authMiddleware: dashboard untuk semua user, admin hanya untuk admin - Tambah redirect otomatis dari / ke /dashboard jika sudah login - User biasa sekarang bisa akses halaman dashboard - Admin panel tetap terbatas untuk role admin saja Co-authored-by: Qwen-Coder --- src/middleware/authMiddleware.tsx | 12 +++++++++++- src/routes/index.tsx | 20 +++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/middleware/authMiddleware.tsx b/src/middleware/authMiddleware.tsx index 021e26e..069db75 100644 --- a/src/middleware/authMiddleware.tsx +++ b/src/middleware/authMiddleware.tsx @@ -68,8 +68,18 @@ const routeRules: RouteRule[] = [ { match: (p) => p === "/dashboard" || p.startsWith("/dashboard/"), requireAuth: true, + redirectTo: "/signin", + }, + { + match: (p) => p === "/admin" || p.startsWith("/admin/"), + requireAuth: true, requiredRole: "admin", - redirectTo: "/profile", + redirectTo: "/dashboard", + }, + { + match: (p) => p === "/" || p === "", + requireAuth: false, + redirectTo: "/dashboard", }, ]; diff --git a/src/routes/index.tsx b/src/routes/index.tsx index 8fe1381..ee59c01 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -32,11 +32,29 @@ import { IconStack2, IconSun, } from "@tabler/icons-react"; -import { createFileRoute, Link } from "@tanstack/react-router"; +import { createFileRoute, Link, useNavigate } from "@tanstack/react-router"; import { useEffect, useState } from "react"; +import { useSnapshot } from "valtio"; +import { authStore } from "@/store/auth"; export const Route = createFileRoute("/")({ component: HomePage, + beforeLoad: async () => { + // Check if user is already logged in + const session = await fetch("/api/session", { + method: "GET", + credentials: "include", + }).then((res) => (res.ok ? res.json() : null)); + + // If user is logged in, redirect to dashboard + if (session?.data?.user) { + throw { + redirect: { + to: "/dashboard", + }, + }; + } + }, }); // Navigation items