Ver código fonte

調整權限功能與學校基本資訊重整

osbert 4 anos atrás
pai
commit
a69cdbca12

+ 6 - 6
TEAMModelOS/ClientApp/src/access/index.js

@@ -8,12 +8,12 @@ Vue.use(VueAccessControl, {
   loginRoute: { // 登入路由
     path: '/login'
   },
-  // permissionDenyRedirectRoute: {  // 權限拒絕重定向路由
-  //   path: '404'
-  // },
-  // defaultRoute: {  // 基本路由
-  //   name: 'home'
-  // },
+  permissionDenyRedirectRoute: {  // 權限拒絕重定向路由
+    path: '404'
+  },
+  defaultRoute: {  // 基本路由
+    name: 'home'
+  },
 });
 
 

+ 0 - 2
TEAMModelOS/ClientApp/src/api/login.js

@@ -93,7 +93,6 @@ export default {
 					id_token: id_token,
 					school_code: defaultschool
 				}).then(res => {
-
 					// 沒有錯誤的話
 					if (!res.error) {
 						// 儲存大雲Token
@@ -131,7 +130,6 @@ export default {
 			// 進行API呼叫
 			await this.studLoginbyIES(data).then(res => {
 				if (res.error == 0) {
-					console.log(res)
 					// 儲存大雲Token
 					localStorage.setItem("auth_token", res.auth_token)
 					store.dispatch('user/setSchoolCode', data.school_code)

+ 5 - 1
TEAMModelOS/ClientApp/src/boot-app.js

@@ -108,9 +108,13 @@ Vue.component('icon', FontAwesomeIcon)
 
 store.dispatch('user/checkSchoolCode');// 設定登入成功的學校簡碼
 store.dispatch('user/checkUserProfile');// 檢查使用者個人詳細資訊
-store.dispatch('user/checkSchoolProfile');// 檢查使用者在學校的詳細資訊
 store.dispatch('user/checkStudentProfile');// 檢查學生的詳細資訊
 store.dispatch('config/checkSrvAdr');// 檢查現在站的位置
+store.dispatch('user/checkSchoolProfile').then(res=>{
+    if(res) {
+        User.freshLogin()
+    }
+});// 檢查使用者在學校的詳細資訊
 
 router.beforeEach((to, from, next) => {
     document.body.scrollTop = 0

+ 0 - 1
TEAMModelOS/ClientApp/src/service/User.js

@@ -12,7 +12,6 @@ export class User {
     static $access;
 
     static async login(userInfo) {
-		console.log(userInfo)
       let userAccess = {
           userId: userInfo.id,
           roles: userInfo.roles,

+ 69 - 9
TEAMModelOS/ClientApp/src/store/module/user.js

@@ -1,4 +1,6 @@
 import apiTools from '@/api'
+import jwtDecode from 'jwt-decode'
+
 export default {
     namespaced: true,
     state: {
@@ -175,11 +177,11 @@ export default {
         setSchoolProfile(state, data) {
             state.schoolProfile.blob_sas = data.blob_sas // 老師在學校的Blob金鑰,讀寫
             state.schoolProfile.blob_uri = data.blob_uri // 老師在學校的Blob網址
-            state.schoolProfile.courses = data.courses // 老師在學校的的個人課程
-            state.schoolProfile.syllabus = data.syllabus // 老師在學校的的個人課綱
-            state.schoolProfile.periods = data.periods // 學制
-            state.schoolProfile.grades = data.grades // 年級
-            state.schoolProfile.classes = data.classes // 課堂
+            state.schoolProfile.courses = data.school_courses // 老師在學校的的個人課程
+            state.schoolProfile.syllabus = data.school_syllabus // 老師在學校的的個人課綱
+            state.schoolProfile.classes = data.school_classes // 課堂
+            state.schoolProfile.periods = data.fmtPeriods // 學制
+            state.schoolProfile.grades = data.fmtGrades // 年級            
         },
         setStudentProfile(state, data) {
             state.studentProfile.blob_uri = data.blob_uri // 學生在學校的Blob網址
@@ -507,16 +509,74 @@ export default {
         },
         setSchoolProfile(context, data) {
             localStorage.setItem('school_profile', encodeURIComponent(JSON.stringify(data),"utf-8"))
+            let fmtPeriods = [];
+            let fmtGrades = [];
+
+            data.school_base.period.forEach( item => {
+                // 學制List
+                fmtPeriods.push({ 'id': item.id, 'name': item.name})
+
+                // 年級List
+                item.grades.forEach( gradeItem => {
+                    fmtGrades.push({ 'periodId': item.id,  'id': gradeItem.id, 'name': gradeItem.name})
+                })
+            })
+            data.fmtPeriods = fmtPeriods
+            data.fmtGrades = fmtGrades
+
             context.commit('setSchoolProfile', data)
         },
         setStudentProfile(context, data) {
             localStorage.setItem('student_profile', encodeURIComponent(JSON.stringify(data),"utf-8"))
             context.commit('setStudentProfile', data)
         },
-        checkSchoolProfile(context) {
-            let school_profile = localStorage.getItem('school_profile')
-            if(school_profile){
-                context.commit('setSchoolProfile', JSON.parse(decodeURIComponent(school_profile,"utf-8")))
+        async checkSchoolProfile(context) {
+
+            let login_schooCode = localStorage.getItem('login_schooCode')
+            let id_token = localStorage.getItem('id_token')
+
+            if(login_schooCode && id_token){
+			    // 輸出暫存
+                let result;
+                
+                let info = {
+                    roles: '',
+                    permissions: ''
+                }
+
+                await apiTools.login.getTeacherSchoolInfo({
+                    id_token: id_token,
+                    school_code: login_schooCode
+                }).then( res => {
+                    console.log(res,'uyuytuyutuytyutuu')
+                    // 沒有錯誤的話
+                    if (!res.error) {
+                        // 儲存大雲Token
+                        localStorage.setItem("auth_token", res.auth_token)
+                        context.dispatch('setSchoolProfile', res)
+                        result = res
+                    }
+                }).catch(err => {
+					console.log(err)
+                })
+
+                let authBySchool = jwtDecode(result.auth_token)
+				info.roles = authBySchool.roles
+                info.permissions = authBySchool.permissions == null ? [] : authBySchool.permissions
+                
+                let userInfo = JSON.parse(decodeURIComponent(localStorage.getItem('userInfo'),"utf-8"))
+                userInfo.roles = info.roles
+                userInfo.permissions = info.permissions
+                localStorage.setItem('userInfo', encodeURIComponent(JSON.stringify(userInfo),"utf-8"))
+
+                let userAccess = JSON.parse(decodeURIComponent(localStorage.getItem('userAccess'),"utf-8"))
+                userAccess.roles = info.roles
+                userAccess.permissions = info.permissions
+                localStorage.setItem('userAccess', encodeURIComponent(JSON.stringify(userAccess),"utf-8"))
+
+                return true
+            } else {
+                return false
             }
         },
         checkStudentProfile(context) {

+ 5 - 7
TEAMModelOS/ClientApp/src/view/login/Index.vue

@@ -539,14 +539,13 @@ export default {
 
       //設定權限並登入
       let identity = localStorage.getItem('identity')
-	  console.log(result)
       User.login(result).then(res => {
         if(res && identity) {
-			this.saveUserCodes({
-				TEAMModelId: result.id,
-				name:result.name,
-				schoolCode: result.defaultschool
-			})
+          this.saveUserCodes({
+            TEAMModelId: result.id,
+            name:result.name,
+            schoolCode: result.defaultschool
+          })
           let path = identity == 'student' ? '/studentWeb' : '/home'
           this.$router.push({ path: path })
         } else {
@@ -556,7 +555,6 @@ export default {
     },
 	saveUserCodes:function(res){
 		this.$store.commit('setUserInfo',res)
-		console.log(this.$store.state.userInfo)
 	},
     getSchools: function(){ // 取得學校清單
       let _this = this