import { useUserStore } from '@/store/modules/user'
|
|
function extractRoleCodes(roles) {
|
if (!Array.isArray(roles)) {
|
return []
|
}
|
|
return roles
|
.map((item) => {
|
if (typeof item === 'string') {
|
return item
|
}
|
if (item && typeof item === 'object') {
|
return item.code || item.name || ''
|
}
|
return ''
|
})
|
.filter(Boolean)
|
}
|
|
function checkRolePermission(el, binding) {
|
const userStore = useUserStore()
|
const userRoles = extractRoleCodes(userStore.getUserInfo.roles)
|
if (!userRoles?.length) {
|
removeElement(el)
|
return
|
}
|
const requiredRoles = Array.isArray(binding.value) ? binding.value : [binding.value]
|
const hasPermission = requiredRoles.some((role) => userRoles.includes(role))
|
if (!hasPermission) {
|
removeElement(el)
|
}
|
}
|
function removeElement(el) {
|
if (el.parentNode) {
|
el.parentNode.removeChild(el)
|
}
|
}
|
const rolesDirective = {
|
mounted: checkRolePermission,
|
updated: checkRolePermission
|
}
|
function setupRolesDirective(app) {
|
app.directive('roles', rolesDirective)
|
}
|
export { setupRolesDirective }
|