Initial commit

This commit is contained in:
AI
2026-05-03 07:26:12 +00:00
commit 776d374b59
57 changed files with 15968 additions and 0 deletions
+63
View File
@@ -0,0 +1,63 @@
import { computed, ref } from 'vue'
import { defineStore } from 'pinia'
export interface AuthUser {
id: string
email?: string | null
firstName?: string | null
lastName?: string | null
roles: string[]
}
export const useAuthStore = defineStore('auth', () => {
const isInitialized = ref(false)
const user = ref<AuthUser | null>(null)
const roles = computed(() => user.value?.roles ?? [])
const isAuthenticated = computed(() => !!user.value)
const displayName = computed(() => {
if (!user.value) {
return ''
}
const fullName = [user.value.firstName, user.value.lastName].filter(Boolean).join(' ').trim()
return fullName || user.value.email || user.value.id
})
function initialize(nextUser: AuthUser | null = null) {
user.value = nextUser
isInitialized.value = true
}
function setUser(nextUser: AuthUser) {
user.value = nextUser
isInitialized.value = true
}
function clearSession() {
user.value = null
isInitialized.value = true
}
function hasRole(role: string) {
return roles.value.includes(role)
}
function hasAnyRole(requiredRoles: string[]) {
return requiredRoles.some((role) => roles.value.includes(role))
}
return {
displayName,
hasAnyRole,
hasRole,
initialize,
isAuthenticated,
isInitialized,
roles,
setUser,
clearSession,
user
}
})