Browse Source

提交权限控制模块

TheLittlePrince 6 years ago
parent
commit
9ddcb040ec

+ 4 - 4
src/api/index.js

@@ -3,12 +3,12 @@ import { BASE_URL } from '@/config'
 const urlFn = v => BASE_URL + v
 
 // 登录
-const GET_TOKEN = urlFn('/api/kmt/correctSys/getMyInfo')
-
+const GET_TOKEN = urlFn('/api/kmt/login/wxlogin/scanlogin')
+// 获取用户信息
+const GetInfo = urlFn('/api/kmt/correctSys/getMyInfo')
 // import fetch from './axios'
-// 获取讲师首页
-// export const GetHome = params => fetch({url: 'user/activeIndex', params})
 
 export {
     GET_TOKEN,
+    GetInfo
 }

+ 2 - 2
src/axios/index.js

@@ -42,7 +42,7 @@ function checkCode (response) {
     return response
 }
 // let accessToken = sessionStorage.getItem("accessToken")
-let accessToken = sessionStorage.getItem("accessToken")
+let accessToken = "jAf6LV0HJJiIvhgvIHCM2t10GW7lHt5VAUE13pmj2lLEWlzQyNqx9dbVG0aXpTvn"
 
 // export default ({method = 'post', url = '', params = {}}) => {
 // 	return new Promise((resolve, reject) => {
@@ -64,7 +64,7 @@ export default {
         return axios({
             method:'post',
             // url,
-            url: `${url}?${qs.stringify("params")}`,
+            url: `${url}?${qs.stringify(params)}`,
             // timeout: TIME_OUT,
             data,
             // data: qs.stringify(data),

+ 7 - 1
src/components/MenuComponent.vue

@@ -11,8 +11,9 @@
       </el-col>
        <el-col :span="4" class="userLogo">
          <div class="">
+            <!-- <div v-html= "'Imgurl' +avatar"></div> -->
           <img class="userstyle" src="../assets/img/user.jpg"/>
-            <span>李老师</span>
+            <span>{{name}}</span>
             <img src="../assets/img/pack.png"/>
          </div>
       </el-col>
@@ -20,6 +21,7 @@
 </template>
 
 <script>
+import {mapGetters} from 'vuex'
 export default {
   name: "navMenu",
   // props: {
@@ -27,6 +29,7 @@ export default {
   // },
   data() {
     return {
+      Imgurl:"https://xt.sharingschool.com/sz",
       menuData: [ {
     id: "1",
     name: "校区管理员",
@@ -62,6 +65,9 @@ export default {
       this.checkindex = index;
     }
   },
+   computed: {
+      ...mapGetters(['name', 'avatar'])
+    },
   mounted() {
     // this.initNav();
   }

+ 0 - 1
src/pages/aikmt/Redirect_uri.vue

@@ -37,7 +37,6 @@ export default {
         code = code.substring(5, code.indexOf('&'));
         let WxCode = {code: code}
       }
-      debugger
            this.$store.dispatch('GET_TOKEN', {
              code: "081nx4K50HDkED1WgLI50InQJ50nx4Kb"
         });

+ 45 - 39
src/permission.js

@@ -1,42 +1,48 @@
-// import router from './router'
-// import store from './store'
-// import { Message } from 'element-ui'
-// import { getToken } from '@/utils/auth' // 验权
+import router from './router'
+import store from './store'
+import { Message } from 'element-ui'
+import { getToken } from '@/utils/auth' // 验权
 
-// const whiteList = ['/login', '/authredirect'] // 不重定向白名单
+const whiteList = ['/login', '/aikmt/redirect_uri'] // 不重定向白名单
 
-// router.beforeEach((to, from, next) => {
-//   if (getToken()) { // 判断是否有token
-//     if (to.path === '/login') {
-//       next()
-//     } else {
-//       if (store.getters.roles.length === 0) {
-//         console.log('roles====0')
-//         store.dispatch('GetInfo').then(res => { // 拉取用户信息
-//           const roles = res.data.roles // note: roles must be a array! such as: ['editor','develop']
-//           console.log('roles?', roles)
-//           store.dispatch('GenerateRoutes', { roles }).then(() => { // 根据roles权限生成可访问的路由表
-//             console.log('addrouters', store.getters.addRouters)
-//             router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
-//             next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
-//           })
-//         }).catch(() => {
-//           store.dispatch('FedLogOut').then(() => {
-//             Message.error('验证失败,请重新登录')
-//             next({ path: '/login' })
-//           })
-//         })
-//       } else {
-//         console.log('====1')
-//         next() // 当有用户权限的时候,说明所有可访问路由已生成 如访问没权限的全面会自动进入404页面
-//       }
-//     }
-//   } else {
-//     if (whiteList.indexOf(to.path) !== -1) {
-//       next()
-//     } else {
-//       next('/login')
-//     }
-//   }
-// })
+router.beforeEach((to, from, next) => {
+  if (getToken()) { // 判断是否有token
+    // debugger
+    if (to.path === '/login') {
+      next()
+    } else {
+      if (store.getters.roles.length === 0) {
+        console.log('roles====0')
+        debugger
+        store.dispatch('GetInfo').then(res => { // 拉取用户信息
+            console.log('roles====1')
+            console.log(res)
+          const roles = res.data.role // note: roles must be a array! such as: ['1']
+          console.log('roles?', roles)
+          store.dispatch('GenerateRoutes', { roles }).then(() => { // 根据roles权限生成可访问的路由表
+            console.log('addrouters', store.getters.addRouters)
+            console.log('roles====3')
+            router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
+            next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
+          })
+        }).catch(() => {
+          store.dispatch('FedLogOut').then(() => {
+            Message.error('验证失败,请重新登录')
+            next({ path: '/login' })
+            console.log('roles====5')
+          })
+        })
+      } else {
+        console.log('====6')
+        next() // 当有用户权限的时候,说明所有可访问路由已生成 如访问没权限的全面会自动进入404页面
+      }
+    }
+  } else {
+    if (whiteList.indexOf(to.path) !== -1) {
+      next()
+    } else {
+      next('/login')
+    }
+  }
+})
 

+ 40 - 61
src/router/index.js

@@ -20,7 +20,7 @@ export const constantRouterMap =
     },
     {
       path: "/Login",
-      name: "Login",
+      name: "login",
       component: Login
     },
     {
@@ -28,45 +28,6 @@ export const constantRouterMap =
       name: "微信认证重定向页",
       component: Redirect_uri
     },
-    {
-      path: "/home",
-      component: Home,
-      children: [
-        {
-          path: "",
-          redirect: "SchoolManager"
-        },
-        {
-          path: "SchoolManager",
-          name: "SchoolManager",
-          component: SchoolManager,
-          meta: { title: '校区管理员', roles: ['3'] }
-        },
-        {
-          path: "TeacherApporval",
-          name: "TeacherApporval",
-          component: TeacherApporval,
-          meta: { title: '教师审核', roles: ['1'] }
-
-        },
-         {
-          path: "TeacherPay",
-          name: "TeacherPay",
-          component: TeacherPay,
-          meta: { title: '教师薪酬管理', roles: ['1'] }
-        },
-        {
-          path: "*",
-          name: "找不到页面",
-          component: Error404
-        }
-      ]
-    },
-    {
-      path: "*",
-      name: "错误页面",
-      component: Error
-    }
   ]
 export default new Router({
   routes: constantRouterMap
@@ -75,26 +36,44 @@ export default new Router({
 // 异步挂载的路由
 // 动态需要根据权限加载的路由表
 export const asyncRouterMap = [
-  // {
-  //   path: '/permission',
-  //   // name: 'permissionhome',
-  //   meta: {
-  //     title: 'permission',
-  //     icon: 'el-icon-setting',
-  //     roles: ['admin']
-  //   },
-  //   component: resolve => require(['../components/common/Home.vue'], resolve),
-  //   children: [
-  //     {
-  //       name: 'permission',
-  //       path: '/permission',
-  //       meta: {
-  //         title: 'permission', icon: 'el-icon-menu', roles: ['admin']
-  //       },
-  //       component: resolve => require(['../components/page/permission.vue'], resolve)
-  //     }
-  //   ]
-  // },
-  // { path: '*', redirect: '/404', hidden: true }
+  {
+    path: "/home",
+    component: Home,
+    children: [
+      {
+        path: "",
+        redirect: "SchoolManager"
+      },
+      {
+        path: "SchoolManager",
+        name: "SchoolManager",
+        component: SchoolManager,
+        meta: { title: '校区管理员', roles: ['2'] }
+      },
+      {
+        path: "TeacherApporval",
+        name: "TeacherApporval",
+        component: TeacherApporval,
+        meta: { title: '教师审核', roles: ['2'] }
+
+      },
+       {
+        path: "TeacherPay",
+        name: "TeacherPay",
+        component: TeacherPay,
+        meta: { title: '教师薪酬管理', roles: ['1'] }
+      },
+      {
+        path: "*",
+        name: "找不到页面",
+        component: Error404
+      }
+    ]
+  },
+  {
+    path: "*",
+    name: "错误页面",
+    component: Error
+  }
 ]
 

+ 7 - 5
src/store/modules/permission.js

@@ -6,6 +6,7 @@ import { asyncRouterMap, constantRouterMap } from '@/router'
  * @param route
  */
 function hasPermission(roles, route) {
+  debugger
   if (route.meta && route.meta.roles) {
     return roles.some(role => route.meta.roles.indexOf(role) >= 0)
   } else {
@@ -18,7 +19,8 @@ function hasPermission(roles, route) {
  * @param asyncRouterMap
  * @param roles
  */
-function filterAsyncRouter(asyncRouterMap, roles) {
+function filterAsyncRouter(asyncRouterMap, roles) {  // 闭包查找所有该roles下的路由
+  debugger
   const accessedRouters = asyncRouterMap.filter(route => {
     if (hasPermission(roles, route)) {
       if (route.children && route.children.length) {
@@ -47,13 +49,13 @@ const permission = {
     GenerateRoutes({ commit }, data) {
       return new Promise(resolve => {
         const { roles } = data
+        debugger
         let accessedRouters
-        if (roles.indexOf('admin') >= 0) {
-          console.log('admin>=0')
+        if (roles.indexOf('3') >= 0) {  // 如果是admin 直接加载所有路由 超级管理员
           accessedRouters = asyncRouterMap
+          // debugger
         } else {
-          console.log('admin<0')
-          accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
+          accessedRouters = filterAsyncRouter(asyncRouterMap, roles)  // 否则根据权限搜索路由
           // accessedRouters = ''
           // accessedRouters = asyncRouterMap
         }

+ 8 - 5
src/store/modules/user.js

@@ -1,4 +1,4 @@
-import { LOGIN,GET_TOKEN } from '@/api'
+import { LOGIN,GET_TOKEN,GetInfo } from '@/api'
 import { getToken, setToken, removeToken } from '@/utils/auth'
 import axios from '@/axios'
 const user = {
@@ -43,8 +43,10 @@ const user = {
        GET_TOKEN({ state, commit }, data) {
         console.log(data);
         axios.post(GET_TOKEN, data).then(res => {
+          // debugger
           if (res && res.code == '999') {
             commit('SET_TOKEN', data.data);
+            sessionStorage.setItem("accessToken",data.data)
           this.$router.push("/home");
           } else {
             this.$router.push("/");
@@ -52,13 +54,14 @@ const user = {
         })
       },
     // 获取用户信息
-    GetInfo({ commit, state }) {
+    GetInfo({ commit, state }, data) {
       return new Promise((resolve, reject) => {
-        getInfo(state.token).then(response => {
+        axios.post(GetInfo, data).then(response => {
           const data = response.data
-          commit('SET_ROLES', data.roles)
+          debugger
+          commit('SET_ROLES', data.role)
           commit('SET_NAME', data.name)
-          commit('SET_AVATAR', data.avatar)
+          commit('SET_AVATAR', data.imgUrl)
           resolve(response)
         }).catch(error => {
           reject(error)

+ 2 - 2
src/utils/auth.js

@@ -1,5 +1,5 @@
-
-const TokenKey = 'token'
+import Cookies from 'js-cookie'
+const TokenKey = 'jAf6LV0HJJiIvhgvIHCM2t10GW7lHt5VAUE13pmj2lLEWlzQyNqx9dbVG0aXpTvn'
 
 export function getToken() {
   return TokenKey