mirror of
https://gitee.com/myxzgzs/boyue-ui-admin-vue3
synced 2025-08-08 16:32:43 +08:00
perf: 添加权限Set 替换检查权限数组 提高检查权限性能
This commit is contained in:
parent
5c0ee866a0
commit
d710c9d27e
@ -1,5 +1,5 @@
|
|||||||
import type { App } from 'vue'
|
import type {App} from 'vue'
|
||||||
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
import {useUserStore} from "@/store/modules/user";
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
|
|
||||||
@ -18,14 +18,9 @@ export function hasPermi(app: App<Element>) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const userStore = useUserStore();
|
||||||
|
const all_permission = '*:*:*'
|
||||||
export const hasPermission = (permission: string[]) => {
|
export const hasPermission = (permission: string[]) => {
|
||||||
const { wsCache } = useCache()
|
return userStore.permissionsSet.has(all_permission) ||
|
||||||
const all_permission = '*:*:*'
|
permission.some(permission => userStore.permissionsSet.has(permission))
|
||||||
const userInfo = wsCache.get(CACHE_KEY.USER)
|
}
|
||||||
const permissions = userInfo?.permissions || []
|
|
||||||
|
|
||||||
return permissions.some((p: string) => {
|
|
||||||
return all_permission === p || permission.includes(p)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
@ -16,6 +16,7 @@ interface UserVO {
|
|||||||
interface UserInfoVO {
|
interface UserInfoVO {
|
||||||
// USER 缓存
|
// USER 缓存
|
||||||
permissions: string[]
|
permissions: string[]
|
||||||
|
permissionsSet: Set<string>
|
||||||
roles: string[]
|
roles: string[]
|
||||||
isSetUser: boolean
|
isSetUser: boolean
|
||||||
user: UserVO
|
user: UserVO
|
||||||
@ -24,6 +25,7 @@ interface UserInfoVO {
|
|||||||
export const useUserStore = defineStore('admin-user', {
|
export const useUserStore = defineStore('admin-user', {
|
||||||
state: (): UserInfoVO => ({
|
state: (): UserInfoVO => ({
|
||||||
permissions: [],
|
permissions: [],
|
||||||
|
permissionsSet: new Set<string>(),
|
||||||
roles: [],
|
roles: [],
|
||||||
isSetUser: false,
|
isSetUser: false,
|
||||||
user: {
|
user: {
|
||||||
@ -58,6 +60,7 @@ export const useUserStore = defineStore('admin-user', {
|
|||||||
userInfo = await getInfo()
|
userInfo = await getInfo()
|
||||||
}
|
}
|
||||||
this.permissions = userInfo.permissions
|
this.permissions = userInfo.permissions
|
||||||
|
this.permissionsSet = new Set(userInfo.permissions)
|
||||||
this.roles = userInfo.roles
|
this.roles = userInfo.roles
|
||||||
this.user = userInfo.user
|
this.user = userInfo.user
|
||||||
this.isSetUser = true
|
this.isSetUser = true
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
||||||
|
import {hasPermission} from "@/directives/permission/hasPermi";
|
||||||
|
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
|
|
||||||
@ -7,21 +9,8 @@ const { t } = useI18n() // 国际化
|
|||||||
* @param {Array} value 校验值
|
* @param {Array} value 校验值
|
||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
*/
|
*/
|
||||||
export function checkPermi(value: string[]) {
|
export function checkPermi(permission: string[]) {
|
||||||
if (value && value instanceof Array && value.length > 0) {
|
return hasPermission(permission)
|
||||||
const { wsCache } = useCache()
|
|
||||||
const permissionDatas = value
|
|
||||||
const all_permission = '*:*:*'
|
|
||||||
const userInfo = wsCache.get(CACHE_KEY.USER)
|
|
||||||
const permissions = userInfo?.permissions || []
|
|
||||||
const hasPermission = permissions.some((permission: string) => {
|
|
||||||
return all_permission === permission || permissionDatas.includes(permission)
|
|
||||||
})
|
|
||||||
return !!hasPermission
|
|
||||||
} else {
|
|
||||||
console.error(t('permission.hasPermission'))
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user