Jelajahi Sumber

排查教师账号权限设置

liqk 4 tahun lalu
induk
melakukan
31f3f31aba

+ 3 - 3
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/teachermgmt.js

@@ -62,12 +62,12 @@ export default {
         'teacher':'教师'
     },
     authority:{
-        'classroom':'班级教室管理',
+        'classroom':'教室管理',
         'system':'学校基础数据管理',
         'studentAccount':'学生账号管理',
         'teachermgmt':'教师账号管理',
-        'classroom-read':'检视班级教室资料',
-        'classroom-upd':'变更班级教室设定',
+        'classroom-read':'检视教室资料',
+        'classroom-upd':'变更教室设定',
         'schoolSetting-read':'检视学校基础设定',
         'schoolSetting-upd':'变更学校基础设定',
         'student-read':'检视学生账号',

+ 3 - 3
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/teachermgmt.js

@@ -62,12 +62,12 @@ export default {
         'teacher':'教師'
     },
     authority:{
-        'classroom':'班級教室管理',
+        'classroom':'教室管理',
         'system':'學校基礎數據管理',
         'studentAccount':'學生帳號管理',
         'teachermgmt':'教師帳號管理',
-        'classroom-read':'檢視班級教室資料',
-        'classroom-upd':'變更班級教室設定',
+        'classroom-read':'檢視教室資料',
+        'classroom-upd':'變更教室設定',
         'schoolSetting-read':'檢視學校基礎設定',
         'schoolSetting-upd':'變更學校基礎設定',
         'student-read':'檢視學生帳號',

+ 10 - 0
TEAMModelOS/ClientApp/src/store/module/user.js

@@ -483,6 +483,16 @@ export default {
                 (resolve, reject) => {
                     apiTools.schoolUser.getSchoolAuthorityList().then(
                         res => {
+                            // 暂时去掉四类(课纲、内容、题库、知识点)校本资源的读取权限,老师加入学校默认会添加这四个权限
+                            let auth = ['content-read','exercise-read','knowledge-read','syllabus-read']
+                            for (let i = 0; i < res.authoritylist.length; i++) {
+                                if(auth.includes(res.authoritylist[i].rowKey)){
+                                    res.authoritylist.splice(i,1)
+                                    --i
+                                }
+                            }
+                            
+
                             //設定權限總列表
                             context.commit('setSchoolSettingAuthList', res.authoritylist)
                             //設定老師權限值

+ 1 - 1
TEAMModelOS/ClientApp/src/view/learnactivity/MgtSchoolEva.vue

@@ -131,7 +131,7 @@
                     </div>-->
 
                     <!-- 保存阅卷配置 -->
-                    <div style="float:right;" class="common-save-btn" v-show="curBarIndex == 2 && isSetting">
+                    <div style="float:right;" class="common-save-btn" v-if="$access.can('admin.*|schoolAc-upd')" v-show="curBarIndex == 2 && isSetting">
                         <Button class="mock-stu-answer" type="text" :loading="btnLoading" @click="saveMarkSetting" icon="ios-albums-outline">
                             {{$t('schoolBaseInfo.saveInfo')}}
                         </Button>

+ 15 - 10
TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkSetting.vue

@@ -120,7 +120,7 @@
                                         </span>
                                     </template>
                                 </Table>
-                                <span class="add-tea-btn" @click="addTeaStatus = true">
+                                <span class="add-tea-btn" v-if="$access.can('admin.*|schoolAc-upd')" @click="addTeaStatus = true">
                                     <Icon type="md-add" />
                                     {{$t('learnActivity.mark.addTea')}}
                                 </span>
@@ -322,15 +322,20 @@ export default {
     methods: {
         //移除阅卷老师
         removeMarker(row, index) {
-            this.$Modal.confirm({
-                title: '移除老师',
-                content: `是否确认移除${row.name}?`,
-                okText: '是',
-                cancelText: '否',
-                onOk: () => {
-                    this.markers.splice(index, 1)
-                }
-            })
+            if (this.$access.can('admin.*|schoolAc-upd')) {
+                this.$Modal.confirm({
+                    title: '移除老师',
+                    content: `是否确认移除${row.name}?`,
+                    okText: '是',
+                    cancelText: '否',
+                    onOk: () => {
+                        this.markers.splice(index, 1)
+                    }
+                })
+            } else {
+                this.$Message.error('权限不足!')
+            }
+
 
         },
         //确认设置阅卷题号

+ 5 - 5
TEAMModelOS/ClientApp/src/view/newcourse/NewCusMgt.vue

@@ -58,8 +58,8 @@
                     <div slot="left" class="teacher-list">
                         <div class="teacher-list-header">
                             <span>{{$t('cusMgt.teaLabel')}}</span>
-                            <Icon type="md-add" size="16" class="tea-action-icon" @click="toggleAddTea" />
-                            <Icon type="md-trash" size="16" class="tea-action-icon" @click="removeTeacher" />
+                            <Icon v-if="$access.can('admin.*|course-upd')" type="md-add" size="16" class="tea-action-icon" @click="toggleAddTea" />
+                            <Icon v-if="$access.can('admin.*|course-upd')" type="md-trash" size="16" class="tea-action-icon" @click="removeTeacher" />
                         </div>
                         <div class="tea-list-content">
                             <vuescroll v-show="teaList.length > 0">
@@ -81,15 +81,15 @@
                                 {{$t('cusMgt.cusNameList')}}
                             </span>
                             <div class="action-btn-wrap">
-                                <span class="action-btn" style="margin-right:30px" @click="updCusInfo()" v-if="isUpd">
+                                <span v-if="$access.can('admin.*|course-upd') && isUpd" class="action-btn" style="margin-right:30px" @click="updCusInfo()">
                                     <Icon type="ios-albums-outline" size="16" />
                                     <span>{{$t('cusMgt.saveLabel')}}</span>
                                 </span>
-                                <span class="action-btn" v-show="curTab == 0" :style="{marginRight:isUpd ? '20px':'30px'}" @click="addNameList">
+                                <span v-if="$access.can('admin.*|course-upd')" class="action-btn" v-show="curTab == 0" :style="{marginRight:isUpd ? '20px':'30px'}" @click="addNameList">
                                     <Icon type="md-add" size="16" />
                                     <span>{{$t('cusMgt.addStuList')}}</span>
                                 </span>
-                                <span class="action-btn" v-show="curTab == 0" @click="removeStuList">
+                                <span v-if="$access.can('admin.*|course-upd')" class="action-btn" v-show="curTab == 0" @click="removeStuList">
                                     <Icon type="md-remove-circle" size="16" />
                                     <span>{{$t('cusMgt.removeList')}}</span>
                                 </span>

+ 53 - 49
TEAMModelOS/ClientApp/src/view/student-account/ClassMgt.vue

@@ -28,8 +28,8 @@
                 </Dropdown>
                 <div v-if="!isSearch" style="float:right;">
                     <Icon class="action-btn-icon" type="ios-search" @click="isSearch = true" />
-                    <Icon v-if="$access.can('admin.*|classroom-upd')" class="action-btn-icon" type="md-trash" @click.stop="showConfirmDelete()" />
-                    <Icon v-if="$access.can('admin.*|classroom-upd')" class="action-btn-icon" type="md-add" @click="addClassroom()" />
+                    <Icon v-if="$access.can('admin.*|student-upd')" class="action-btn-icon" type="md-trash" @click.stop="showConfirmDelete()" />
+                    <Icon v-if="$access.can('admin.*|student-upd')" class="action-btn-icon" type="md-add" @click="addClassroom()" />
                 </div>
                 <div v-else class="dark-iview-input" style="float:right;width:calc(100% - 200px);padding-right:10px;">
                     <Input icon="ios-close" v-model="keyword" :placeholder="$t('schoolBaseInfo.codeSearchHolder')" autofocus style="width:100%" @on-click="closeKeySearch" @on-change="filterClassname" />
@@ -291,7 +291,7 @@ export default {
                     { required: true, message: this.$t('schoolBaseInfo.typeWarning'), trigger: 'change' }
                 ],
                 year: [
-                    { required: true, type:'number', message: this.$t('schoolBaseInfo.gradeWarning'), trigger: 'change' }
+                    { required: true, type: 'number', message: this.$t('schoolBaseInfo.gradeWarning'), trigger: 'change' }
                 ]
             }
         }
@@ -627,57 +627,61 @@ export default {
             this.currentTabIndex = index
         },
         saveClassroom() {
-            this.$refs['classInfo'].validate((valid) => {
-                if (!valid) {
-                    this.$Message.error(this.$t('schoolBaseInfo.formWarning'))
-                } else {
-                    let option = this.classListShow[this.curClassIndex].option
-                    if (!option) {
-                        option = 'update'
+            if (this.$access.can('admin.*|student-upd')) {
+                this.$refs['classInfo'].validate((valid) => {
+                    if (!valid) {
+                        this.$Message.error(this.$t('schoolBaseInfo.formWarning'))
                     } else {
-                        this.classListShow[this.curClassIndex]['code'] = this.$store.state.userInfo.schoolCode
-                    }
-                    delete this.classListShow[this.curClassIndex].option
-                    this.isSaveLoading = true
-                    this.isListLoading = true
-                    if (this.classListShow[this.curClassIndex].openType == '2') {
-                        this.classListShow[this.curClassIndex].teacher.id = ''
-                        this.classListShow[this.curClassIndex].teacher.name = ''
-                    }
-                    this.$api.schoolSetting.classUpsert({
-                        classroom: this.classListShow[this.curClassIndex],
-                        option: option,
-                        school_code: this.$store.state.userInfo.schoolCode
-                    }).then(
-                        res => {
-                            if (res) {
-                                if (res.error) {
-                                    this.classListShow[this.curClassIndex].option = option
-                                    this.$Message.error(res.v)
-                                } else {
-                                    this.$Message.success(this.$t('schoolBaseInfo.csTips3'))
-                                    this.updated = false
-                                    if (option == 'insert') {
-                                        this.classListShow[this.curClassIndex].code = 'Class-' + this.classListShow[this.curClassIndex].code
-                                        this.classList.unshift(this.classListShow[this.curClassIndex])
-                                        this.$store.dispatch('user/addSchoolClasses', this.classListShow[this.curClassIndex]);
+                        let option = this.classListShow[this.curClassIndex].option
+                        if (!option) {
+                            option = 'update'
+                        } else {
+                            this.classListShow[this.curClassIndex]['code'] = this.$store.state.userInfo.schoolCode
+                        }
+                        delete this.classListShow[this.curClassIndex].option
+                        this.isSaveLoading = true
+                        this.isListLoading = true
+                        if (this.classListShow[this.curClassIndex].openType == '2') {
+                            this.classListShow[this.curClassIndex].teacher.id = ''
+                            this.classListShow[this.curClassIndex].teacher.name = ''
+                        }
+                        this.$api.schoolSetting.classUpsert({
+                            classroom: this.classListShow[this.curClassIndex],
+                            option: option,
+                            school_code: this.$store.state.userInfo.schoolCode
+                        }).then(
+                            res => {
+                                if (res) {
+                                    if (res.error) {
+                                        this.classListShow[this.curClassIndex].option = option
+                                        this.$Message.error(res.v)
+                                    } else {
+                                        this.$Message.success(this.$t('schoolBaseInfo.csTips3'))
+                                        this.updated = false
+                                        if (option == 'insert') {
+                                            this.classListShow[this.curClassIndex].code = 'Class-' + this.classListShow[this.curClassIndex].code
+                                            this.classList.unshift(this.classListShow[this.curClassIndex])
+                                            this.$store.dispatch('user/addSchoolClasses', this.classListShow[this.curClassIndex]);
+                                        }
                                     }
+                                } else {
+                                    this.$Message.error('API error!')
                                 }
-                            } else {
+                            },
+                            err => {
                                 this.$Message.error('API error!')
                             }
-                        },
-                        err => {
-                            this.$Message.error('API error!')
-                        }
-                    ).finally(
-                        () => {
-                            this.isSaveLoading = false
-                            this.isListLoading = false
-                        }
-                    )
-                }
-            })
+                        ).finally(
+                            () => {
+                                this.isSaveLoading = false
+                                this.isListLoading = false
+                            }
+                        )
+                    }
+                })
+            }else{
+                this.$Message.error('权限不足!')
+            }
         },
         /**显示确认删除班级对话框 */
         showConfirmDelete() {

+ 4 - 4
TEAMModelOS/ClientApp/src/view/student-account/MgtStuList.vue

@@ -5,9 +5,9 @@
                 <div class="list-header">
                     {{$t('cusMgt.nameList')}}
                     <div v-if="!isSearch" style="float:right;">
-                        <Icon class="action-btn-icon" type="md-trash" @click="delStuList()" />
+                        <Icon v-if="$access.can('admin.*|student-upd')" class="action-btn-icon" type="md-trash" @click="delStuList()" />
                         <!-- <Icon class="action-btn-icon" type="md-create" /> -->
-                        <Icon class="action-btn-icon" type="md-add" @click="createList" />
+                        <Icon v-if="$access.can('admin.*|student-upd')" class="action-btn-icon" type="md-add" @click="createList" />
                         <!-- <Icon class="action-btn-icon" type="ios-search" @click="isSearch = true" /> -->
                     </div>
                     <Input v-else icon="ios-close" v-model="keyWord" :placeholder="$t('cusMgt.searchHolder')" @on-click="isSearch = false" size="small" style="float:right;width: 180px;margin-top:10px;margin-right:10px" />
@@ -33,11 +33,11 @@
             <div slot="right" class="stu-info-box">
                 <div class="stu-info-header">
                     <div class="action-btn-wrap">
-                        <span class="action-btn" style="margin-right:30px" @click="pushStudents">
+                        <span v-if="$access.can('admin.*|student-upd')" class="action-btn" style="margin-right:30px" @click="pushStudents">
                             <Icon type="md-add" size="16" />
                             <span>{{$t('cusMgt.addStu')}}</span>
                         </span>
-                        <span class="action-btn" @click="batchRemove">
+                        <span v-if="$access.can('admin.*|student-upd')" class="action-btn" @click="batchRemove">
                             <Icon type="md-remove-circle" size="16"/>
                             <span>{{$t('cusMgt.remvStu')}}</span>
                         </span>

+ 6 - 6
TEAMModelOS/ClientApp/src/view/teachcontent/index.vue

@@ -14,7 +14,7 @@
                         </Tooltip>
                     </div>
                     <!-- Blob空间计算 -->
-                    <div :class="($access.can('admin.*|content-school-upd') || routerScope == 'private') ? 'space-box animated fadeIn fast' : 'space-box animated fadeOut fast'">
+                    <div :class="($access.can('admin.*|content-upd') || routerScope == 'private') ? 'space-box animated fadeIn fast' : 'space-box animated fadeOut fast'">
                         <div class="percent-box">
                             <span class="percent-item-span storage-full" :style="{ width: '100%' }" v-if="sizeInfo.total > storageSpace"></span>
                             <span class="percent-item-span storage-res" :style='{ width: getPercent(sizeInfo.res) }'></span>
@@ -99,11 +99,11 @@
                             </Checkbox>
                         </CheckboxGroup>
                     </div>
-                    <span v-if="$access.can('admin.*|content-school-upd') || routerScope == 'private'" class="action-btn-wrap" @click="delFileBatch">
+                    <span v-if="$access.can('admin.*|content-upd') || routerScope == 'private'" class="action-btn-wrap" @click="delFileBatch">
                         <Icon type="md-trash" class="toggle-btn-icon" />
                         {{$t('teachContent.delBatch')}}
                     </span>
-                    <span v-if="$access.can('admin.*|content-school-upd') || routerScope == 'private'" @click="showUpload" class="action-btn-wrap">
+                    <span v-if="$access.can('admin.*|content-upd') || routerScope == 'private'" @click="showUpload" class="action-btn-wrap">
                         <Icon type="md-cloud-upload" class="toggle-btn-icon" size="16" />
                         {{$t('teachContent.btnUpload')}}
                     </span>
@@ -168,8 +168,8 @@
                                 <div class="item-tools">
                                     <Icon type="md-download" size="18" color="white" :title="$t('teachContent.tips3')" @click="downloadFile(index)" />
                                     <Icon v-if="activeType !== 'other' && activeType != 'res'" type="md-eye" size="18" color="white" :title="$t('teachContent.tips4')" @click="openPreviewFile(index)" />
-                                    <Icon v-if="$access.can('admin.*|content-school-upd') || routerScope == 'private'" type="md-trash" size="18" color="white" :title="$t('teachContent.tips7')" @click="delFile(row,index)" />
-                                    <Icon v-if="$access.can('admin.*|content-school-upd') || routerScope == 'private'" type="md-create" size="18" color="white" :title="$t('teachContent.tips6')" @click="rename(row,index)" />
+                                    <Icon v-if="$access.can('admin.*|content-upd') || routerScope == 'private'" type="md-trash" size="18" color="white" :title="$t('teachContent.tips7')" @click="delFile(row,index)" />
+                                    <Icon v-if="$access.can('admin.*|content-upd') || routerScope == 'private'" type="md-create" size="18" color="white" :title="$t('teachContent.tips6')" @click="rename(row,index)" />
                                 </div>
                             </template>
                         </Table>
@@ -182,7 +182,7 @@
                                 <div class="item-tools">
                                     <Icon type="md-download" size="18" color="white" :title="$t('teachContent.tips3')" @click.stop="downloadFile(props.index)" />
                                     <Icon type="md-eye" size="18" color="white" :title="$t('teachContent.tips4')" @click="openPreviewFile(props.index)" />
-                                    <Icon v-if="$access.can('admin.*|content-school-upd') || routerScope == 'private'" type="md-trash" size="18" color="white" :title="$t('teachContent.tips7')" @click.stop="delFile(props.value, props.index)" />
+                                    <Icon v-if="$access.can('admin.*|content-upd') || routerScope == 'private'" type="md-trash" size="18" color="white" :title="$t('teachContent.tips7')" @click.stop="delFile(props.value, props.index)" />
                                     <span style="color:white; float:right;margin-right:10px;">{{$jsFn.formatBytes(props.value.size)}}</span>
                                 </div>
                             </div>

+ 1 - 1
TEAMModelOS/ClientApp/src/view/teachermgmt/Index.vue

@@ -14,7 +14,7 @@
     <div class="mgmt-top">
       <div class="tab-box">
         <span class="pane" @click="paneBtn('userList')" :class="{ active: compts === 'userList' }">{{ $t('teachermgmt.page.text1') }}</span>
-        <span class="pane" @click="paneBtn('personnel')" :class="{ active: compts === 'personnel' }">{{ $t('teachermgmt.page.text2') }} <Badge :count="requestedUserCount" class-name="badgesty"></Badge></span>
+        <span v-if="$access.can('admin.*|teacher-upd')" class="pane" @click="paneBtn('personnel')" :class="{ active: compts === 'personnel' }">{{ $t('teachermgmt.page.text2') }} <Badge :count="requestedUserCount" class-name="badgesty"></Badge></span>
       </div>
     </div>
     <div class="mgmt-main">

File diff ditekan karena terlalu besar
+ 1097 - 1110
TEAMModelOS/ClientApp/src/view/teachermgmt/components/userList/Index.vue