permission.spec.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { describe, it, expect } from 'vitest'
  2. import { hasPermission, isRouteAllowed, getAllowedMenuRoutes } from '@/utils/permission'
  3. import type { RouteRecordNormalized } from 'vue-router'
  4. function makeRoute(
  5. path: string,
  6. meta?: Record<string, unknown>,
  7. children?: RouteRecordNormalized[]
  8. ): RouteRecordNormalized {
  9. return {
  10. path,
  11. meta: meta ?? {},
  12. children: children ?? [],
  13. name: path,
  14. components: {},
  15. instances: {},
  16. aliasOf: undefined,
  17. leaveGuards: {} as any,
  18. updateGuards: {} as any,
  19. enterCallbacks: {},
  20. mods: new Set(),
  21. props: {},
  22. redirect: undefined,
  23. beforeEnter: undefined
  24. } as unknown as RouteRecordNormalized
  25. }
  26. describe('permission utils', () => {
  27. it('hasPermission returns true when no permission required', () => {
  28. expect(hasPermission(undefined, 'common_user')).toBe(true)
  29. expect(hasPermission([], 'common_user')).toBe(true)
  30. })
  31. it('hasPermission checks employee type', () => {
  32. expect(hasPermission(['flow_manager'], 'flow_manager')).toBe(true)
  33. expect(hasPermission(['flow_manager'], 'common_user')).toBe(false)
  34. })
  35. it('isRouteAllowed respects meta.permissions', () => {
  36. const allowed = makeRoute('/flow', { permissions: ['flow_manager'] })
  37. expect(isRouteAllowed(allowed, 'flow_manager')).toBe(true)
  38. expect(isRouteAllowed(allowed, 'common_user')).toBe(false)
  39. const publicRoute = makeRoute('/dashboard', {})
  40. expect(isRouteAllowed(publicRoute, 'common_user')).toBe(true)
  41. })
  42. it('getAllowedMenuRoutes filters by permissions', () => {
  43. const routes = [
  44. makeRoute('/', { title: '首页', icon: 'HomeFilled' }),
  45. makeRoute(
  46. '/system',
  47. { title: '系统管理', permissions: ['dept_manager'] },
  48. [makeRoute('/system/user', { title: '用户管理', permissions: ['dept_manager'] })]
  49. )
  50. ]
  51. const common = getAllowedMenuRoutes(routes, 'common_user')
  52. expect(common.some((r) => r.path === '/system')).toBe(false)
  53. const manager = getAllowedMenuRoutes(routes, 'dept_manager')
  54. expect(manager.some((r) => r.path === '/system')).toBe(true)
  55. })
  56. })