Files
milsim-site-v4/ui/src/stores/user.ts
2025-11-19 21:21:49 -05:00

37 lines
1015 B
TypeScript

import { ref, computed } from 'vue'
import { defineStore } from 'pinia'
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 isLoggedIn = computed(() => user.value !== null)
async function loadUser() {
//@ts-ignore
const res = await fetch(`${import.meta.env.BASE_URL}/members/me`, {
credentials: 'include',
});
if (res.ok) {
const data = await res.json();
user.value = data;
}
loaded.value = true;
}
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 }
})