diff --git a/ui/src/pages/Unauthorized.vue b/ui/src/pages/Unauthorized.vue
index 81340d7..a00d5a7 100644
--- a/ui/src/pages/Unauthorized.vue
+++ b/ui/src/pages/Unauthorized.vue
@@ -10,10 +10,6 @@
-
-
@@ -21,7 +17,7 @@
\ No newline at end of file
diff --git a/ui/src/router/index.js b/ui/src/router/index.js
index b69baa2..f886f04 100644
--- a/ui/src/router/index.js
+++ b/ui/src/router/index.js
@@ -37,16 +37,16 @@ const router = createRouter({
})
router.beforeEach(async (to) => {
- const userStore = useUserStore()
+ const user = useUserStore()
// Make sure user state is loaded before checking
- if (!userStore.loaded) {
+ if (!user.loaded) {
console.log('loaduser')
- await userStore.loadUser();
+ await user.loadUser();
}
// Not logged in
- if (to.meta.requiresAuth && !userStore.isLoggedIn) {
+ if (to.meta.requiresAuth && !user.isLoggedIn) {
// Redirect back to original page after login
const redirectUrl = encodeURIComponent(window.location.origin + to.fullPath)
window.location.href = `https://aj17thdevapi.nexuszone.net/login?redirect=${redirectUrl}`
@@ -55,14 +55,16 @@ router.beforeEach(async (to) => {
// Must be a member
- if (to.meta.memberOnly && userStore.state !== 'member') {
+ if (to.meta.memberOnly && user.state !== 'member') {
return '/unauthorized'
}
- // // Must have specific role
- // if (to.meta.roles && !to.meta.roles.includes(userStore.role)) {
- // return '/unauthorized'
- // }
+ console.log(!user.hasRole("Dev"));
+
+ // Must have specific role
+ if (to.meta.roles && !user.hasRole('Dev') && !user.hasAnyRole(to.meta.roles)) {
+ return '/unauthorized'
+ }
})
export default router;
\ No newline at end of file
diff --git a/ui/src/stores/user.ts b/ui/src/stores/user.ts
index 2e9ca64..ec75250 100644
--- a/ui/src/stores/user.ts
+++ b/ui/src/stores/user.ts
@@ -3,9 +3,9 @@ import { defineStore } from 'pinia'
export const useUserStore = defineStore('user', () => {
const user = ref(null)
- const roles = computed(() => { user.value.roles })
+ const roles = computed(() => new Set(user.value?.roleData?.map(r => r.name) ?? []));
const loaded = ref(false);
-
+ const state = computed(() => user.value.state);
const isLoggedIn = computed(() => user.value !== null)
async function loadUser() {
@@ -23,5 +23,15 @@ export const useUserStore = defineStore('user', () => {
loaded.value = true;
}
- return { user, isLoggedIn, roles, loadUser, loaded }
+
+ function hasRole(role: string): boolean {
+ return roles.value.has(role)
+ }
+
+
+ function hasAnyRole(requiredRoles: string[]): boolean {
+ return requiredRoles.some(r => roles.value.has(r))
+ }
+
+ return { user, isLoggedIn, roles, loadUser, loaded, hasAnyRole, hasRole, state }
})