- Login page: toggle between admin/sub-account login - Auth store: isAdmin/isIamUser computed properties - MainLayout: role-based sidebar (admin sees all, sub-account sees only my keys) - HomeRedirect: auto-redirect based on role - MyKeysView: sub-account can view/reveal their own API Keys - Portal is completely isolated from admin functions Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
33 lines
1.2 KiB
JavaScript
33 lines
1.2 KiB
JavaScript
import { defineStore } from 'pinia'
|
|
import { ref, computed } from 'vue'
|
|
|
|
export const useAuthStore = defineStore('auth', () => {
|
|
const token = ref(localStorage.getItem('airgate_token') || '')
|
|
const refreshToken = ref(localStorage.getItem('airgate_refresh') || '')
|
|
const user = ref(JSON.parse(localStorage.getItem('airgate_user') || 'null'))
|
|
|
|
const isLoggedIn = computed(() => !!token.value)
|
|
const isAdmin = computed(() => user.value?.role !== 'iam_user')
|
|
const isIamUser = computed(() => user.value?.role === 'iam_user')
|
|
|
|
function setAuth(data) {
|
|
token.value = data.access
|
|
refreshToken.value = data.refresh || ''
|
|
user.value = data.user
|
|
localStorage.setItem('airgate_token', data.access)
|
|
localStorage.setItem('airgate_refresh', data.refresh || '')
|
|
localStorage.setItem('airgate_user', JSON.stringify(data.user))
|
|
}
|
|
|
|
function logout() {
|
|
token.value = ''
|
|
refreshToken.value = ''
|
|
user.value = null
|
|
localStorage.removeItem('airgate_token')
|
|
localStorage.removeItem('airgate_refresh')
|
|
localStorage.removeItem('airgate_user')
|
|
}
|
|
|
|
return { token, refreshToken, user, isLoggedIn, isAdmin, isIamUser, setAuth, logout }
|
|
})
|