diff --git a/ui/src/components/Navigation/Navbar.vue b/ui/src/components/Navigation/Navbar.vue index c610eef..07d7419 100644 --- a/ui/src/components/Navigation/Navbar.vue +++ b/ui/src/components/Navigation/Navbar.vue @@ -46,7 +46,8 @@ function blurAfter() { -
+ +
@@ -91,7 +92,8 @@ function blurAfter() { - + Administration @@ -145,6 +147,18 @@ function blurAfter() {
+ +
+ + + + + Join + + + + +
diff --git a/ui/src/composables/useAuth.ts b/ui/src/composables/useAuth.ts index 1f1929e..6c43fa2 100644 --- a/ui/src/composables/useAuth.ts +++ b/ui/src/composables/useAuth.ts @@ -5,6 +5,10 @@ import { Role } from "@shared/types/roles" export function useAuth() { const userStore = useUserStore(); + // Account status control + const accountStatus = userStore.state; + + // RBAC const roles = computed(() => { return userStore.user?.roleData?.map((r: Role) => r.name) ?? []; }); @@ -28,5 +32,5 @@ export function useAuth() { return roles.value.every(name => roleNames.includes(name)) } - return { hasRole, hasAnyRole, hasAllRoles } + return { hasRole, hasAnyRole, hasAllRoles, accountStatus } } \ No newline at end of file diff --git a/ui/src/stores/user.ts b/ui/src/stores/user.ts index ec75250..f3ff0f1 100644 --- a/ui/src/stores/user.ts +++ b/ui/src/stores/user.ts @@ -5,7 +5,7 @@ export const useUserStore = defineStore('user', () => { const user = ref(null) const roles = computed(() => new Set(user.value?.roleData?.map(r => r.name) ?? [])); const loaded = ref(false); - const state = computed(() => user.value.state); + const state = computed(() => user.value?.state || undefined); const isLoggedIn = computed(() => user.value !== null) async function loadUser() {