feat: rbac接入
This commit is contained in:
+10
-5
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user