zhou zhou
3 天以前 0a1d91e42e6c5af96e1108e9ebcc37e99eb3b22c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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 }