diff --git a/frontend/app/middleware/adminOnly.ts b/frontend/app/middleware/adminOnly.ts new file mode 100644 index 0000000..5017b64 --- /dev/null +++ b/frontend/app/middleware/adminOnly.ts @@ -0,0 +1,15 @@ +import { Role } from "~/types/role"; +import type { User } from "~/types/user"; + +export default defineNuxtRouteMiddleware(async (to) => { + const user = useSanctumUser(); + + // If user is not authenticated, let sanctum:auth handle it + if (!user.value) { + return; + } + + if (user.value.role !== Role.ADMIN) { + return abortNavigation(createError({ statusCode: 403, statusMessage: 'Forbidden' })); + } +}); diff --git a/frontend/app/middleware/companyOnly.ts b/frontend/app/middleware/companyOnly.ts new file mode 100644 index 0000000..af2a20a --- /dev/null +++ b/frontend/app/middleware/companyOnly.ts @@ -0,0 +1,15 @@ +import { Role } from "~/types/role"; +import type { User } from "~/types/user"; + +export default defineNuxtRouteMiddleware(async (to) => { + const user = useSanctumUser(); + + // If user is not authenticated, let sanctum:auth handle it + if (!user.value) { + return; + } + + if (user.value.role !== Role.EMPLOYER) { + return abortNavigation(createError({ statusCode: 403, statusMessage: 'Forbidden' })); + } +}); diff --git a/frontend/app/middleware/studentOnly.ts b/frontend/app/middleware/studentOnly.ts new file mode 100644 index 0000000..f3289ac --- /dev/null +++ b/frontend/app/middleware/studentOnly.ts @@ -0,0 +1,15 @@ +import { Role } from "~/types/role"; +import type { User } from "~/types/user"; + +export default defineNuxtRouteMiddleware(async (to) => { + const user = useSanctumUser(); + + // If user is not authenticated, let sanctum:auth handle it + if (!user.value) { + return; + } + + if (user.value.role !== Role.STUDENT) { + return abortNavigation(createError({ statusCode: 403, statusMessage: 'Forbidden' })); + } +});