UNPKG

next-start-cli

Version:

This is a CLI tool to create a nextjs project and add the necessary dependencies and configurations

55 lines (45 loc) 1.75 kB
import { NextRequest, NextResponse } from "next/server"; import { getAllAvailableRoutes } from "@/data/routes/admin-routes"; import { DEFAULT_LOGIN_REDIRECT, DEFAULT_NON_AUTHORIZED_REDIRECT, DEFAULT_NON_AUTH_REDIRECT, authRoutes, } from "@/data/routes/default-routes"; import { UserRoles } from "@/enum/user"; import { middlewareRouteCheck } from "@/lib/role/functions"; export default async function middleware(req: NextRequest) { //Todo: Get the user role from session const role = UserRoles.ADMIN; const pathname = req.nextUrl.pathname; // If user has role and tries to access auth routes, redirect to dashboard if (role && authRoutes.some((route) => pathname === route.url)) { return NextResponse.redirect(new URL(DEFAULT_LOGIN_REDIRECT, req.url)); } // If trying to access /admin routes without a role, redirect to login if (!role && req.nextUrl.pathname.startsWith("/admin")) { return NextResponse.redirect(new URL(DEFAULT_NON_AUTH_REDIRECT, req.url)); } // Skip other checks for auth routes (like /login) if (authRoutes.some((route) => pathname === route.url)) { return NextResponse.next(); } // Only check available routes for /admin paths if (pathname.startsWith("/admin")) { const availableRoutes = getAllAvailableRoutes(role); if (!availableRoutes.some((route) => pathname.includes(route.url))) { return NextResponse.redirect( new URL(DEFAULT_NON_AUTHORIZED_REDIRECT, req.url) ); } if (!middlewareRouteCheck(availableRoutes, pathname)) { return NextResponse.redirect( new URL(DEFAULT_NON_AUTHORIZED_REDIRECT, req.url) ); } } return NextResponse.next(); } export const config = { matcher: ["/admin/:path*", "/login"], };