Initial commit
This commit is contained in:
@@ -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
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user