feat: refresh user permissions on page reload

Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
This commit is contained in:
dxc
2026-02-26 16:21:35 +08:00
parent 57c2c532ca
commit c86e67b793
2 changed files with 33 additions and 2 deletions

View File

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed } from 'vue' import { computed, onMounted } from 'vue'
import { useRouter, useRoute } from 'vue-router' import { useRouter, useRoute } from 'vue-router'
import { ElMessageBox, ElMessage } from 'element-plus' import { ElMessageBox, ElMessage } from 'element-plus'
import { InfoFilled, SwitchButton, UserFilled } from '@element-plus/icons-vue' import { InfoFilled, SwitchButton, UserFilled } from '@element-plus/icons-vue'
@ -14,6 +14,13 @@ const isLoginPage = computed(() => {
return route.path === '/login' return route.path === '/login'
}) })
// 页面加载时刷新权限
onMounted(() => {
if (userStore.token) {
userStore.refreshUserPermissions()
}
})
// --- 退出登录逻辑 Start --- // --- 退出登录逻辑 Start ---
const handleLogout = () => { const handleLogout = () => {
ElMessageBox.confirm( ElMessageBox.confirm(

View File

@ -83,6 +83,29 @@ export const useUserStore = defineStore('user', () => {
localStorage.removeItem('permissions') localStorage.removeItem('permissions')
} }
// 刷新用户权限(不重新登录)
const refreshUserPermissions = async () => {
if (!token.value || !role.value) {
console.warn('无法刷新权限:用户未登录')
return
}
try {
const permRes = await getRolePermissions(role.value)
const permData = permRes.data || permRes
// 合并 menus 和 elements 两个数组
const allPerms = [
...(permData.menus || []),
...(permData.elements || [])
]
permissions.value = allPerms
localStorage.setItem('permissions', JSON.stringify(allPerms))
console.log('用户权限已刷新')
} catch (error) {
console.error('刷新权限失败:', error)
// 可选:保留原有权限
}
}
// 3. Getters / Helpers // 3. Getters / Helpers
// 判断当前用户是否拥有某些角色 // 判断当前用户是否拥有某些角色
const hasRole = (roles: string[]) => { const hasRole = (roles: string[]) => {
@ -101,6 +124,7 @@ export const useUserStore = defineStore('user', () => {
permissions, permissions,
handleLogin, handleLogin,
logout, logout,
refreshUserPermissions,
hasRole, hasRole,
hasPermission hasPermission
} }