|
|
@@ -1,6 +1,50 @@ |
|
|
|
import { NextRequestWithAuth, withAuth } from "next-auth/middleware"; |
|
|
|
import { authOptions } from "@/config/authConfig"; |
|
|
|
import { ability, authOptions } from "@/config/authConfig"; |
|
|
|
import { NextFetchEvent, NextResponse } from "next/server"; |
|
|
|
import { getToken } from "next-auth/jwt"; |
|
|
|
import { ConnectingAirportsOutlined } from "@mui/icons-material"; |
|
|
|
import { getServerSession } from "next-auth"; |
|
|
|
|
|
|
|
// abilities |
|
|
|
export const [ |
|
|
|
VIEW_USER, |
|
|
|
MAINTAIN_USER, |
|
|
|
MAINTAIN_TIMESHEET, |
|
|
|
VIEW_TASK_TEMPLATE, |
|
|
|
VIEW_GROUP, |
|
|
|
VIEW_MASTERDATA, |
|
|
|
MAINTAIN_MASTERDATA, |
|
|
|
VIEW_DASHBOARD_SELF, |
|
|
|
VIEW_DASHBOARD_ALL, |
|
|
|
IMPORT_INVOICE, |
|
|
|
MAINTAIN_GROUP, |
|
|
|
GENERATE_REPORTS, |
|
|
|
VIEW_STAFF_PROFILE, |
|
|
|
IMPORT_RECEIPT, |
|
|
|
MAINTAIN_TASK_TEMPLATE, |
|
|
|
MAINTAIN_TIMESHEET_7DAYS, |
|
|
|
VIEW_PROJECT, |
|
|
|
MAINTAIN_PROJECT, |
|
|
|
] = [ |
|
|
|
'VIEW_USER', |
|
|
|
'MAINTAIN_USER', |
|
|
|
'MAINTAIN_TIMESHEET', |
|
|
|
'VIEW_TASK_TEMPLATE', |
|
|
|
'VIEW_GROUP', |
|
|
|
'VIEW_MASTERDATA', |
|
|
|
'MAINTAIN_MASTERDATA', |
|
|
|
'VIEW_DASHBOARD_SELF', |
|
|
|
'VIEW_DASHBOARD_ALL', |
|
|
|
'IMPORT_INVOICE', |
|
|
|
'MAINTAIN_GROUP', |
|
|
|
'GENERATE_REPORTS', |
|
|
|
'VIEW_STAFF_PROFILE', |
|
|
|
'IMPORT_RECEIPT', |
|
|
|
'MAINTAIN_TASK_TEMPLATE', |
|
|
|
'MAINTAIN_TIMESHEET_7DAYS', |
|
|
|
'VIEW_PROJECT', |
|
|
|
'MAINTAIN_PROJECT' |
|
|
|
] |
|
|
|
|
|
|
|
const PRIVATE_ROUTES = [ |
|
|
|
"/analytics", |
|
|
@@ -14,15 +58,12 @@ const PRIVATE_ROUTES = [ |
|
|
|
]; |
|
|
|
const LANG_QUERY_PARAM = "lang"; |
|
|
|
|
|
|
|
const authMiddleware = withAuth({ |
|
|
|
pages: authOptions.pages, |
|
|
|
}); |
|
|
|
|
|
|
|
export default async function middleware( |
|
|
|
req: NextRequestWithAuth, |
|
|
|
event: NextFetchEvent, |
|
|
|
) { |
|
|
|
const langPref = req.nextUrl.searchParams.get(LANG_QUERY_PARAM); |
|
|
|
const token = await getToken({ req: req, secret: process.env.SECRET }); |
|
|
|
if (langPref) { |
|
|
|
// Redirect to same url without the lang query param + set cookies |
|
|
|
const newUrl = new URL(req.nextUrl); |
|
|
@@ -31,6 +72,70 @@ export default async function middleware( |
|
|
|
response.cookies.set("i18next", langPref); |
|
|
|
return response; |
|
|
|
} |
|
|
|
|
|
|
|
// const session = await getServerSession(authOptions); |
|
|
|
// console.log(session); |
|
|
|
|
|
|
|
let abilities: string[] = [] |
|
|
|
if (token) { |
|
|
|
abilities = (token.abilities as ability[]).map((item: ability) => item.actionSubjectCombo); |
|
|
|
} |
|
|
|
|
|
|
|
const authMiddleware = withAuth({ |
|
|
|
pages: authOptions.pages, |
|
|
|
callbacks: { |
|
|
|
authorized: ({req, token}) => { |
|
|
|
let isAuth = Boolean(token); |
|
|
|
if (req.nextUrl.pathname.startsWith('/settings')) { |
|
|
|
isAuth = [VIEW_MASTERDATA, MAINTAIN_MASTERDATA].some((ability) => abilities.includes(ability)); |
|
|
|
} |
|
|
|
if (req.nextUrl.pathname.startsWith('/settings/user')) { |
|
|
|
isAuth = [MAINTAIN_USER, VIEW_USER].some((ability) => abilities.includes(ability)); |
|
|
|
} |
|
|
|
if (req.nextUrl.pathname.startsWith('/analytics')) { |
|
|
|
isAuth = [GENERATE_REPORTS].some((ability) => abilities.includes(ability)); |
|
|
|
} |
|
|
|
if (req.nextUrl.pathname.startsWith('/settings/staff/edit')) { |
|
|
|
isAuth = [VIEW_STAFF_PROFILE].some((ability) => abilities.includes(ability)); |
|
|
|
} |
|
|
|
return isAuth |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
// for (const obj of abilities) { |
|
|
|
// switch (obj.actionSubjectCombo.toLowerCase()) { |
|
|
|
// case "maintain_user": |
|
|
|
// // appendRoutes(settings) |
|
|
|
// break; |
|
|
|
// case "maintain_group": |
|
|
|
// // appendRoutes("/testing-maintain_user") |
|
|
|
// break; |
|
|
|
// case "view_user": |
|
|
|
// // appendRoutes("/testing-maintain_user") |
|
|
|
// break; |
|
|
|
// case "view_group": |
|
|
|
// // appendRoutes("/testing-maintain_user") |
|
|
|
// break; |
|
|
|
// } |
|
|
|
// } |
|
|
|
|
|
|
|
// console.log("TESTING_ROUTES: ") |
|
|
|
// console.log(TESTING_ROUTES) |
|
|
|
|
|
|
|
// TESTING_ROUTES.some((route) => { |
|
|
|
// if (req.nextUrl.pathname.startsWith(route)) { |
|
|
|
// console.log("////////////////start//////////////// ") |
|
|
|
// console.log("TESTING_ROUTES:") |
|
|
|
// console.log("route:") |
|
|
|
// console.log(route) |
|
|
|
// console.log("pathname:") |
|
|
|
// console.log(req.nextUrl.pathname) |
|
|
|
// console.log("////////////////end////////////////") |
|
|
|
// } |
|
|
|
// return (req.nextUrl.pathname.startsWith(route)) |
|
|
|
// }) |
|
|
|
|
|
|
|
// Matcher for using the auth middleware |
|
|
|
return PRIVATE_ROUTES.some((route) => req.nextUrl.pathname.startsWith(route)) |
|
|
|