directives.js 1.0 KB

1234567891011121314151617181920212223242526272829
  1. import { UserStore } from '@/store/user'
  2. import { get, isArray } from 'lodash-es'
  3. import router from '@/router'
  4. const InitDirective = (app) => {
  5. app.directive('method', {
  6. mounted(el, binding) {
  7. const { user } = UserStore()
  8. const { value: code } = binding
  9. const rUser = toRaw(user)
  10. // 超级管理员不进行检查
  11. if (get(rUser, 'role') === 'Admin' && get(rUser, 'is_super') === '0') return
  12. const roleCode = get(rUser, 'role_code')
  13. // 需要判断roleCode中是否有这个权限.但是权限又需要路由拼接起来,最少也得有上层级组合
  14. const cr = router.currentRoute.value
  15. // 拼接当前路由和层级的name
  16. const rArr = cr.matched.filter((f) => f.name !== 'Layout').map((i) => i.name)
  17. rArr.push(code)
  18. const thisMethodCode = `${rArr.join('.')}`
  19. if (!isArray(roleCode)) {
  20. el.parentNode.removeChild(el)
  21. }
  22. if (!roleCode.includes(thisMethodCode)) {
  23. el.parentNode.removeChild(el)
  24. }
  25. }
  26. })
  27. }
  28. export { InitDirective }