soc_site-astro/src/middleware.ts
Jorge Vargas 4cafc41b88
Some checks failed
/ build (push) Failing after 4m43s
Implement Discord linking
2025-03-21 11:35:03 -06:00

34 lines
1.1 KiB
TypeScript

import { auth } from 'auth'
import { defineMiddleware } from 'astro:middleware'
import PAGES from 'utils/pages.json'
import prismaClient from 'utils/prisma-client'
export const onRequest = defineMiddleware(async (context, next) => {
const isAuthed = await auth.api.getSession({
headers: context.request.headers
})
if (isAuthed) {
context.locals.user = isAuthed.user
context.locals.session = isAuthed.session
const user = await prismaClient.users.findUnique({
select: { roles: { select: { roleName: true, roles: { select: { permissions: true } } } } },
where: { id: isAuthed.user.id }
})
const permissions = (user?.roles.map((r) => r.roles.permissions).flat() as string[]) ?? []
const pages = PAGES.filter((p) => p.perms.some((r) => permissions.includes(r))).map((p) => p.url)
context.locals.permissions = permissions
context.locals.pages = pages
context.locals.roles = user?.roles.map((r) => r.roleName) ?? []
} else {
context.locals.user = null
context.locals.session = null
context.locals.permissions = []
context.locals.pages = []
}
return next()
})