authutils.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import httputils from '@/utils/httputils'
  2. import store from '@/store'
  3. import menus from '@/data/menus'
  4. function toLogin() {
  5. let ssoServer = process.env.SSO_SERVER
  6. let redirectUrl = window.location.protocol + '//' + window.location.host
  7. window.location.href = `${ssoServer}/login?redirectUrl=${redirectUrl}/auth`
  8. }
  9. function checkMenu(menu, ps) {
  10. let result = { name: menu.name, icon: menu.icon, path: menu.path }
  11. if (menu.children) {
  12. // 如果有下级菜单权限,则自动拥有上级菜单权限
  13. result.children = []
  14. menu.children.forEach(child => {
  15. let submenu = checkMenu(child, ps)
  16. if (submenu) {
  17. result.children.push(submenu)
  18. }
  19. })
  20. return result.children.length > 0 ? result : null
  21. } else if (menu.opts) {
  22. return menu.opts.some(opt => ps[opt.permission]) ? result : null
  23. } else {
  24. // 如果没有下级菜单且没有opts属性, 菜单可以直接访问,不需要权限
  25. return result
  26. }
  27. }
  28. export default {
  29. /**
  30. * 路由守卫, 每次路由跳转时验证登录
  31. * @param {*} to
  32. * @param {*} from
  33. * @param {*} next
  34. */
  35. routerBeforeEach: async function(to, from, next) {
  36. console.log('router before ', to)
  37. if (to.path == '/auth' || to.path == '/nouser') {
  38. next()
  39. } else {
  40. // let userInfo = store.getters['layout/userInfo']
  41. // if (!userInfo) {
  42. // // 本地是未登录状态, 保存目标页面地址, 去登录
  43. // let lastRoute = { path: to.path, params: to.params, query: to.query }
  44. // store.commit('setLastRoute', lastRoute)
  45. // toLogin()
  46. // } else {
  47. // if (to.meta.breadcrumbs) {
  48. // store.dispatch('setBreadcrumb', to.meta.breadcrumbs)
  49. // }
  50. // next()
  51. // }
  52. // return true
  53. next();
  54. }
  55. },
  56. routerBeforeEach2: async function(to, from, next) {
  57. console.log('router before ', to)
  58. if (to.path == '/login') {
  59. next()
  60. return false
  61. }
  62. let userInfo = store.getters['layout/userInfo']
  63. console.log('user info ', userInfo)
  64. if (!userInfo) {
  65. // 本地是未登录状态, 检查是否有sso令牌
  66. var token = httputils.getCookie('sagacloud-auth-token')
  67. console.log('sso token ', token)
  68. if (!token) {
  69. // 没有sso令牌, 跳转登录页面
  70. toLogin()
  71. return false
  72. } else {
  73. // 有sso令牌, 去服务端校验令牌并获取用户信息
  74. // next({ path: to.path, params: to.params, query: to.query })
  75. store.dispatch('layout/loadUserInfo').then(resp => {
  76. console.log('store dispatch result ', resp)
  77. if (resp.result == 'success') {
  78. next({ path: to.path, params: to.params, query: to.query })
  79. } else {
  80. toLogin()
  81. }
  82. })
  83. }
  84. } else {
  85. next()
  86. }
  87. return true
  88. },
  89. getMenus(permissions) {
  90. let result = []
  91. let allMenus = []
  92. // 开发环境下展示demo页面
  93. // if (process.env.NODE_ENV === 'development') {
  94. // allMenus = menus.demoMenus
  95. // }
  96. allMenus = allMenus.concat(menus.menus)
  97. let ps = !permissions ? {} : permissions
  98. allMenus.forEach(item => {
  99. let menu = checkMenu(item, ps)
  100. if (menu) {
  101. result.push(menu)
  102. }
  103. })
  104. return result
  105. },
  106. toLogout() {
  107. // TODO
  108. store.commit('setSsoToken', null)
  109. let ssoServer = process.env.SSO_SERVER
  110. let redirectUrl = window.location.protocol + '//' + window.location.host + '/'
  111. window.location.href = `${ssoServer}/logout?redirectUrl=${redirectUrl}`
  112. },
  113. toLoginPage: toLogin
  114. }