guard.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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 (_.get(store, 'state.user.role.code') === 'sadmin') {
  10. next();
  11. return;
  12. } else if (!$dev_env) {
  13. next('/');
  14. return;
  15. }
  16. }
  17. // 检查是不是登陆,登陆页面放过
  18. if (to.path === '/login') {
  19. next();
  20. return;
  21. }
  22. let user = store.state.user;
  23. if (!_.get(user, '_id')) {
  24. const str = sessionStorage.getItem('user');
  25. if (!str) next('/login');
  26. const obj = jwt.decode(str);
  27. store.commit('setUser', obj, { root: true });
  28. user = store.state.user;
  29. }
  30. // 首页你得让人进
  31. if (to.path === '/') {
  32. next();
  33. return;
  34. }
  35. // 检查是否有权限进入页面
  36. const menu = _.get(store, 'state.user.role.menu');
  37. const mode = _.get(menu, 'mode');
  38. if (mode === 'all') {
  39. next();
  40. return;
  41. }
  42. const can_in = _.get(menu, to.path);
  43. if (can_in) next();
  44. else {
  45. const keys = Object.keys(menu).filter((f) => f !== 'mode');
  46. const r = keys.find((f) => to.path.includes(f));
  47. if (r) {
  48. next();
  49. } else {
  50. next(from.path);
  51. Message.error('您无权限访问该页面');
  52. }
  53. }
  54. });
  55. };