feat: rbac接入

This commit is contained in:
Blizzard
2026-04-28 23:47:48 +08:00
parent ccb36fa59c
commit 3ed0b76fc2
8 changed files with 76 additions and 133 deletions
+10 -5
View File
@@ -12,6 +12,7 @@ interface AuthState {
isAuthenticated: boolean
menus: SystemMenu[]
permissions: string[]
hasFetchedMenus: boolean
login: (user: SystemUser, token: string) => void
logout: () => Promise<void>
refreshMenus: () => Promise<void>
@@ -47,27 +48,31 @@ export const useAuthStore = create<AuthState>((set, get) => ({
isAuthenticated: initial.isAuthenticated,
menus: [],
permissions: [],
hasFetchedMenus: false,
login: (user, token) => {
localStorage.setItem(TOKEN_KEY, token)
localStorage.setItem(USER_KEY, JSON.stringify(user))
set({ user, token, isAuthenticated: true, menus: [], permissions: [] })
set({ user, token, isAuthenticated: true, menus: [], permissions: [], hasFetchedMenus: false })
},
logout: async () => {
try { await apiLogout() } catch { /* ignore */ }
localStorage.removeItem(TOKEN_KEY)
localStorage.removeItem(USER_KEY)
set({ user: null, token: null, isAuthenticated: false, menus: [], permissions: [] })
set({ user: null, token: null, isAuthenticated: false, menus: [], permissions: [], hasFetchedMenus: false })
},
refreshMenus: async () => {
if (!get().isAuthenticated) return
try {
const res = await getUserMenuTree()
const menus = res.data || []
set({ menus, permissions: extractPermissions(menus) })
} catch (e) { console.error('获取菜单失败:', e) }
const menus = (res.data as any).menus || []
set({ menus, permissions: extractPermissions(menus), hasFetchedMenus: true })
} catch (e) {
console.error('获取菜单失败:', e)
set({ hasFetchedMenus: true })
}
},
hasPermission: (permission) => {