2024-11-18 19:40:44 +08:00
|
|
|
import type { Directive } from "vue"
|
2024-11-21 21:03:09 +08:00
|
|
|
import { useUserStore } from "@/pinia/stores/user"
|
2024-11-21 19:53:33 +08:00
|
|
|
import { isArray } from "@/utils/validate"
|
2022-04-21 18:20:39 +08:00
|
|
|
|
2024-11-25 17:26:27 +08:00
|
|
|
/**
|
|
|
|
* @name 权限指令
|
|
|
|
* @description 和权限判断函数 checkPermission 功能类似
|
|
|
|
*/
|
2022-04-21 18:20:39 +08:00
|
|
|
export const permission: Directive = {
|
|
|
|
mounted(el, binding) {
|
2023-06-01 18:00:08 +08:00
|
|
|
const { value: permissionRoles } = binding
|
2024-11-14 17:33:12 +08:00
|
|
|
const { roles } = useUserStore()
|
2024-11-21 19:53:33 +08:00
|
|
|
if (isArray(permissionRoles) && permissionRoles.length > 0) {
|
2024-11-18 19:40:44 +08:00
|
|
|
const hasPermission = roles.some(role => permissionRoles.includes(role))
|
2023-06-01 18:00:08 +08:00
|
|
|
// hasPermission || (el.style.display = "none") // 隐藏
|
|
|
|
hasPermission || el.parentNode?.removeChild(el) // 销毁
|
2022-04-21 18:20:39 +08:00
|
|
|
} else {
|
2022-07-01 16:25:51 +08:00
|
|
|
throw new Error(`need roles! Like v-permission="['admin','editor']"`)
|
2022-04-21 18:20:39 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|