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