Browse Source

登录权限配置

庞利祥 5 years ago
parent
commit
be554a1b84

+ 1 - 0
config/dev.env.js

@@ -5,4 +5,5 @@ const prodEnv = require('./prod.env')
 module.exports = merge(prodEnv, {
     NODE_ENV: '"development"',
     BASE_URL: '"http://172.16.0.239"', //线上iframe地址
+    SSO_SERVER: '"http://192.168.20.101:8004"'
 })

+ 6 - 1
config/index.js

@@ -10,11 +10,16 @@ module.exports = {
         assetsSubDirectory: 'static',
         assetsPublicPath: '/',
         proxyTable: {
+            '/user': {
+                target: 'http://localhost:52009',
+                changeOrigin: true
+            },
             '/admin': {
                 target: 'http://localhost:52009',
                 changeOrigin: true,
                 pathRewrite: {
                     // "^/apis": ""
+                    "^/admin": ""
                 }
             },
             '/data-platform-3': {
@@ -77,7 +82,7 @@ module.exports = {
 
         // Various Dev Server settings
         host: '0.0.0.0', // can be overwritten by process.env.HOST
-        port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
+        port: 28080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
         autoOpenBrowser: false,
         errorOverlay: true,
         notifyOnErrors: true,

+ 19 - 16
src/api/framework.js

@@ -2,9 +2,10 @@ import store from '@/store'
 import demoMenus from '@/demo/demo-menus'
 import menus from '@/data/menus'
 import router from '@/router'
+import httputils from '@/utils/httputils'
+// const userInfo = { username: 'admin', permissions: ['demo'] }
 
-const userInfo = { username: 'admin', permissions: ['demo'] }
-
+const userInfo = null
 function toLogin() {
     router.push('/login')
 }
@@ -46,19 +47,19 @@ export default {
             } else {
                 store.dispatch('setBreadcrumb', [])
             }
-            next()
-            // let userInfo = store.getters['layout/userInfo']
-            // if (!userInfo) {
-            //     // 本地是未登录状态, 保存目标页面地址, 去登录
-            //     let lastRoute = { path: to.path, params: to.params, query: to.query }
-            //     store.commit('setLastRoute', lastRoute)
-            //     toLogin()
-            // } else {
-            //     if (to.meta.breadcrumbs) {
-            //         store.dispatch('setBreadcrumb', to.meta.breadcrumbs)
-            //     }
-            //     next()
-            // }
+            // next()
+            let userInfo = store.getters['layout/userInfo']
+            if (!userInfo) {
+                // 本地是未登录状态, 保存目标页面地址, 去登录
+                let lastRoute = { path: to.path, params: to.params, query: to.query }
+                store.commit('setLastRoute', lastRoute)
+                toLogin()
+            } else {
+                if (to.meta.breadcrumbs) {
+                    store.dispatch('setBreadcrumb', to.meta.breadcrumbs)
+                }
+                next()
+            }
             return true
         }
     },
@@ -72,6 +73,7 @@ export default {
         // }
         allMenus = allMenus.concat(menus)
         let ps = !permissions ? {} : permissions
+        console.log(ps)
         allMenus.forEach(item => {
             let menu = checkMenu(item, ps)
             if (menu) {
@@ -92,7 +94,8 @@ export default {
     },
 
     loadUserInfo() {
-        return new Promise((resolve, reject) => resolve({ result: 'success', ...userInfo }))
+        // return new Promise((resolve, reject) => resolve({ result: 'success', ...userInfo }))
+        return httputils.getJson(`/admin/user/userInfo`)
     },
 
     toLogout() {

+ 15 - 15
src/api/httputils.js

@@ -17,21 +17,21 @@ const axiosservice = axios.create({
     })
 })
 
-// axiosservice.interceptors.request.use(
-//     config => {
-//         config.withCredentials = true // 允许携带token ,这个是解决跨域产生的相关问题
-//         let token = store.getters['ssoToken']
-//         if (token) {
-//             config.headers = {
-//                 'sso-token': token
-//             }
-//         }
-//         return config
-//     },
-//     error => {
-//         return Promise.reject(error)
-//     }
-// )
+axiosservice.interceptors.request.use(
+    config => {
+        config.withCredentials = true // 允许携带token ,这个是解决跨域产生的相关问题
+        let token = store.getters['ssoToken']
+        if (token) {
+            config.headers = {
+                'sso-token': token
+            }
+        }
+        return config
+    },
+    error => {
+        return Promise.reject(error)
+    }
+)
 
 axiosservice.interceptors.response.use(
     function(res) {

+ 1 - 1
src/api/system/admin.js

@@ -1,6 +1,6 @@
 import httputils from '@/utils/httputils'
 export default {
     loadUserInfo() {
-        return httputils.getJson('/admin/userInfo')
+        return httputils.getJson('/admin/user/userInfo')
     }
 }

+ 4 - 2
src/framework/layout/layout-store.js

@@ -1,5 +1,6 @@
 import frameworkApi from '@/api/framework'
 import storage from '@/framework/utils/storage'
+import axios from 'axios'
 
 const KEY_MENU_SELECTED = 'menu_selected'
 const KEY_PROJECT_SELECTED = 'global_project_selected'
@@ -10,7 +11,7 @@ export default {
     state: {
         sidebarClosed: false,
         sidebarSelected: '', // sidebar选中的选项
-        userInfo: { username: 'admin' },
+        userInfo: null, //{ username: 'admin' },
         permissions: { "system:role:delete": true, "system:role:create": true, "system:role:query": true, "system:role:setOpts": true },
         projectId: 'Pj4201050001',
         projects: [{ name: '风雅园', id: 'Pj1101010001' }, { name: '亚心医院', id: 'Pj4201050001' }],
@@ -68,9 +69,10 @@ export default {
     },
     actions: {
         loadUserInfo({ state }) {
+            console.log(state)
             return new Promise((resolve, reject) => {
                 frameworkApi.loadUserInfo().then(resp => {
-                    // console.log('api load user info ', resp)
+                    console.log(resp)
                     if (resp.result == 'success') {
                         state.userInfo = { username: resp.username }
                         state.permissions = {}

+ 2 - 1
src/router/index.js

@@ -2,6 +2,7 @@ import Vue from 'vue'
 import Router from 'vue-router'
 import frameworkApi from '@/api/framework'
 import demoRoute from '@/demo/demo-routes'
+import authutils from '@/utils/authutils'
 import systemRoute from './system'
 Vue.use(Router)
 
@@ -14,6 +15,6 @@ const router = new Router({
     routes: routes
 })
 
-router.beforeEach(frameworkApi.routerBeforeEach)
+router.beforeEach(authutils.routerBeforeEach)
 
 export default router

+ 3 - 2
src/router/system.js

@@ -35,12 +35,13 @@ import facilityLedger from '@/views/ledger/facility/index'
 import dialogDevice from '@/views/ledger/facility/addfacility'
 import propertyLedger from '@/views/ledger/property/index'
 import dialogSystem from '@/views/ledger/property/addproperty'
-
+import auth from '@/views/system/auth'
 
 
 export default [
     { path: '/', name: '', component: LayoutMain, children: [{ path: '', name: 'blank', component: Dasboard }] },
-    { path: '/login', name: 'Login', component: Login },
+    //{ path: '/login', name: 'Login', component: Login },
+    { path: '/auth', name: 'auth', component: auth },
     // 系统集成
     {
         path: '/point',

+ 12 - 46
src/utils/authutils.js

@@ -5,6 +5,7 @@ import menus from '@/data/menus'
 function toLogin() {
     let ssoServer = process.env.SSO_SERVER
     let redirectUrl = window.location.protocol + '//' + window.location.host
+    console.log('tologin ', `${ssoServer}/login?redirectUrl=${redirectUrl}/auth`)
     window.location.href = `${ssoServer}/login?redirectUrl=${redirectUrl}/auth`
 }
 
@@ -40,56 +41,21 @@ export default {
         if (to.path == '/auth' || to.path == '/nouser') {
             next()
         } else {
-            // let userInfo = store.getters['layout/userInfo']
-            // if (!userInfo) {
-            //     // 本地是未登录状态, 保存目标页面地址, 去登录
-            //     let lastRoute = { path: to.path, params: to.params, query: to.query }
-            //     store.commit('setLastRoute', lastRoute)
-            //     toLogin()
-            // } else {
-            //     if (to.meta.breadcrumbs) {
-            //         store.dispatch('setBreadcrumb', to.meta.breadcrumbs)
-            //     }
-            //     next()
-            // }
-            // return true
-
-            next();
-        }
-    },
-
-    routerBeforeEach2: async function(to, from, next) {
-        console.log('router before ', to)
-        if (to.path == '/login') {
-            next()
-            return false
-        }
-        let userInfo = store.getters['layout/userInfo']
-        console.log('user info ', userInfo)
-        if (!userInfo) {
-            // 本地是未登录状态, 检查是否有sso令牌
-            var token = httputils.getCookie('sagacloud-auth-token')
-            console.log('sso token ', token)
-            if (!token) {
-                // 没有sso令牌, 跳转登录页面
+            let userInfo = store.getters['layout/userInfo']
+            console.log("user info ", userInfo)
+            if (!userInfo) {
+                // 本地是未登录状态, 保存目标页面地址, 去登录
+                let lastRoute = { path: to.path, params: to.params, query: to.query }
+                store.commit('setLastRoute', lastRoute)
                 toLogin()
-                return false
             } else {
-                // 有sso令牌, 去服务端校验令牌并获取用户信息
-                // next({ path: to.path, params: to.params, query: to.query })
-                store.dispatch('layout/loadUserInfo').then(resp => {
-                    console.log('store dispatch result ', resp)
-                    if (resp.result == 'success') {
-                        next({ path: to.path, params: to.params, query: to.query })
-                    } else {
-                        toLogin()
-                    }
-                })
+                if (to.meta.breadcrumbs) {
+                    store.dispatch('setBreadcrumb', to.meta.breadcrumbs)
+                }
+                next()
             }
-        } else {
-            next()
+            return true
         }
-        return true
     },
 
     getMenus(permissions) {

+ 2 - 3
src/views/system/auth/index.vue

@@ -14,11 +14,10 @@ export default {
         return {}
     },
     created() {
-        // console.log('--------------------- index created')
-        // console.log(this.$route.query)
         let token = this.$route.query.token
+        console.log(token)
         this.$store.commit('setSsoToken', token)   
-             
+        console.log(this.$store.state.ssoToken)         
         this.$store.dispatch('layout/loadUserInfo').then(resp => {
             console.log('store dispatch result ', resp)
             if (resp.result == 'success') {