guard.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import store from '@/store/index';
  2. const _ = require('lodash');
  3. const jwt = require('jsonwebtoken');
  4. let $dev_env = process.env.NODE_ENV === 'development';
  5. import { Message } from 'element-ui';
  6. export default (router) => {
  7. router.beforeEach((to, from, next) => {
  8. if (to.path.includes('dev')) {
  9. if (!$dev_env) next('/');
  10. }
  11. // 检查是不是登陆,登陆页面放过
  12. if (to.path === '/login') {
  13. next();
  14. return;
  15. }
  16. const user = store.state.user;
  17. if (!_.get(user, '_id')) {
  18. const str = sessionStorage.getItem('user');
  19. if (!str) next('/login');
  20. const obj = jwt.decode(str);
  21. store.commit('setUser', obj, { root: true });
  22. }
  23. console.log(store.state.user);
  24. // 检查是否有权限进入页面
  25. const menu = _.get(store, 'state.user.role.menu');
  26. const mode = _.get(menu, 'mode');
  27. if (mode === 'all') {
  28. next();
  29. return;
  30. }
  31. const can_in = _.get(menu, to.path);
  32. if (can_in) next();
  33. else {
  34. const keys = Object.keys(menu).filter((f) => f !== 'mode');
  35. let toPath = '';
  36. if (keys.includes('/')) toPath = '/';
  37. else toPath = _.head(keys);
  38. next(toPath);
  39. Message.error('您无权限访问该页面');
  40. }
  41. });
  42. };