diff --git a/components/Header.vue b/components/Header.vue index 4ab147c..28de4eb 100644 --- a/components/Header.vue +++ b/components/Header.vue @@ -2,8 +2,15 @@
@@ -45,5 +52,6 @@ nav ul { padding: 0; display: flex; column-gap: 0.5em; + list-style: none; } diff --git a/error.vue b/error.vue new file mode 100644 index 0000000..6067d75 --- /dev/null +++ b/error.vue @@ -0,0 +1,21 @@ + + + diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..0b8cefb --- /dev/null +++ b/index.d.ts @@ -0,0 +1,13 @@ +declare module "#app" { + interface PageMeta { + allowedAccountTypes?: string[], + } +} + +declare module "vue-router" { + interface RouteMeta { + allowedAccountTypes?: string[], + } +} + +export {} diff --git a/middleware/authenticated.ts b/middleware/authenticated.ts index c19472f..5404929 100644 --- a/middleware/authenticated.ts +++ b/middleware/authenticated.ts @@ -5,4 +5,15 @@ export default defineNuxtRouteMiddleware(async (to, from) => { console.log("Not logged in, redirecting to /login"); return navigateTo("/login"); } + + if ( + to.meta.allowedAccountTypes + && !to.meta.allowedAccountTypes.includes(session.value.account.type) + ) { + throw createError({ + status: 403, + statusMessage: "Forbidden", + message: "You are not allowed to access this resource.", + }) + } }) diff --git a/pages/edit.vue b/pages/edit.vue new file mode 100644 index 0000000..c3d6f0c --- /dev/null +++ b/pages/edit.vue @@ -0,0 +1,13 @@ + + + diff --git a/pages/index.vue b/pages/index.vue index b34a34c..345f7f5 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -3,8 +3,21 @@

Schedule Demo

+ +