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() {