seaislee1209 3d2b332657 feat: add sub-account portal (login + my keys view)
- 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>
2026-03-21 01:33:02 +08:00

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 }
})