fix(next): migrate admin middleware to proxy convention

This commit is contained in:
2026-02-10 12:52:38 +01:00
parent 24eca3e740
commit efb93f212b
2 changed files with 2 additions and 2 deletions

46
apps/admin/src/proxy.ts Normal file
View File

@@ -0,0 +1,46 @@
import { type NextRequest, NextResponse } from "next/server"
import {
canAccessRoute,
getRequiredPermission,
isPublicRoute,
resolveRoleFromRequest,
} from "@/lib/access"
export function proxy(request: NextRequest) {
const { pathname } = request.nextUrl
if (isPublicRoute(pathname)) {
return NextResponse.next()
}
const role = resolveRoleFromRequest(request)
if (!role) {
const loginUrl = request.nextUrl.clone()
loginUrl.pathname = "/login"
loginUrl.searchParams.set("next", pathname)
return NextResponse.redirect(loginUrl)
}
if (!canAccessRoute(role, pathname)) {
const unauthorizedUrl = request.nextUrl.clone()
unauthorizedUrl.pathname = "/unauthorized"
const required = getRequiredPermission(pathname)
unauthorizedUrl.searchParams.set("required", required.permission)
unauthorizedUrl.searchParams.set("scope", required.scope)
return NextResponse.redirect(unauthorizedUrl)
}
const response = NextResponse.next()
response.headers.set("x-cms-role", role)
return response
}
export const config = {
matcher: ["/((?!_next/static|_next/image|favicon.ico).*)"],
}