diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 8eb7ffebc..a6c74818c 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -4,14 +4,13 @@ class AttachmentsController < ApplicationController before_action :require_login, :check_auth, except: [:show] before_action :find_file, only: %i[show destroy] + before_action :attachment_candown, only: [:show] include ApplicationHelper def show # 1. 优先跳到cdn # 2. 如果没有cdn,send_file - candown = attachment_candown @file - tip_exception("您没有权限下载该附件") if !candown if @file.cloud_url.present? update_downloads(@file) redirect_to @file.cloud_url and return @@ -160,32 +159,32 @@ class AttachmentsController < ApplicationController edu_setting('public_cdn_host') + "/" + path end - def attachment_candown attachment - return true if current_user.admin? || current_user.business? - candown = false - if attachment.container && current_user.logged? - # 课堂资源、作业、毕设相关资源的权限判断 - if attachment.container.is_a?(Course) - course = attachment.container - candown = current_user.member_of_course?(course) || attachment.is_public == 1 - elsif attachment.container.is_a?(HomeworkCommon) || attachment.container.is_a?(GraduationTask) || attachment.container.is_a?(GraduationTopic) - course = attachment.container&.course - elsif attachment.container.is_a?(StudentWork) - course = attachment.container&.homework_common&.course - elsif attachment.container.is_a?(StudentWorksScore) - course = attachment.container&.student_work&.homework_common&.course - elsif attachment.container.is_a?(GraduationWork) - course = attachment.container&.graduation_task&.course - elsif attachment.container.is_a?(GraduationWorkScore) - course = attachment.container&.graduation_work&.graduation_task&.course - else - candown = true - end - - candown = !candown && course.present? ? current_user.member_of_course?(course) : candown - else + def attachment_candown + unless current_user.admin? || current_user.business? candown = true + if @file.container && current_user.logged? + # 课堂资源、作业、毕设相关资源的权限判断 + if @file.container.is_a?(Course) + course = @file.container + candown = current_user.member_of_course?(course) || @file.is_public == 1 + elsif @file.container.is_a?(HomeworkCommon) || @file.container.is_a?(GraduationTask) || @file.container.is_a?(GraduationTopic) + course = @file.container&.course + candown = current_user.member_of_course?(course) + elsif @file.container.is_a?(StudentWork) + course = @file.container&.homework_common&.course + candown = current_user.member_of_course?(course) + elsif @file.container.is_a?(StudentWorksScore) + course = @file.container&.student_work&.homework_common&.course + candown = current_user.member_of_course?(course) + elsif @file.container.is_a?(GraduationWork) + course = @file.container&.graduation_task&.course + candown = current_user.member_of_course?(course) + elsif @file.container.is_a?(GraduationWorkScore) + course = @file.container&.graduation_work&.graduation_task&.course + candown = current_user.member_of_course?(course) + end + tip_exception(403, "您没有权限进入") if course.present? && !candown + end end - candown end end diff --git a/public/react/src/modules/page/MainContent.js b/public/react/src/modules/page/MainContent.js index c03d49351..601c002a9 100644 --- a/public/react/src/modules/page/MainContent.js +++ b/public/react/src/modules/page/MainContent.js @@ -114,7 +114,7 @@ class MainContent extends Component { ? readRepoTimeout === true ?
代码加载失败, this.props.fetchRepositoryCode(this.props, null, null, true)}>重试 + onClick={() => this.props.fetchRepositoryCode(this.props, null, null, true, true)}>重试
:
diff --git a/public/react/src/modules/page/MainContentContainer.js b/public/react/src/modules/page/MainContentContainer.js index d24a5cefb..a437391d6 100644 --- a/public/react/src/modules/page/MainContentContainer.js +++ b/public/react/src/modules/page/MainContentContainer.js @@ -235,7 +235,7 @@ class MainContentContainer extends Component { } // arg_path 点击文件目录树时,传入的点击节点对应的path - fetchRepositoryCode( props, arg_path, type, isRetry) { + fetchRepositoryCode( props, arg_path, type, isRetry, retryAndRefresh) { const { challenge, showSnackbar, game, shixun, myshixun, hide_code } = props ? props : this.props; if (shixun.vnc == true) { // vnc模式下不需要加载代码 @@ -293,6 +293,10 @@ class MainContentContainer extends Component { // that._cancel = c; // }) }).then((fetchRepositoryCodeResponse) => { + if (retryAndRefresh && fetchRepositoryCodeResponse.data.content) { + window.location.reload() + return; + } // 空字符串还是正常切换 if (fetchRepositoryCodeResponse.data.status == 0) { readingRepoTimes = readingRepoTimes + 1;