25 lines
815 B
TypeScript
25 lines
815 B
TypeScript
import type { App, Directive } from "vue"
|
||
import { useUserStore } from "@/pinia/stores/user"
|
||
import { isArray } from "@@/utils/validate"
|
||
|
||
/**
|
||
* @name 权限指令
|
||
* @description 和权限判断函数 checkPermission 功能类似
|
||
*/
|
||
const permission: Directive = {
|
||
mounted(el, binding) {
|
||
const { value: permissionRoles } = binding
|
||
const { roles } = useUserStore()
|
||
if (isArray(permissionRoles) && permissionRoles.length > 0) {
|
||
const hasPermission = roles.some(role => permissionRoles.includes(role))
|
||
hasPermission || el.parentNode?.removeChild(el)
|
||
} else {
|
||
throw new Error(`参数必须是一个数组且长度大于 0,参考:v-permission="['admin','editor']"`)
|
||
}
|
||
}
|
||
}
|
||
|
||
export function installPermissionDirective(app: App) {
|
||
app.directive("permission", permission)
|
||
}
|