@@ -80,9 +80,28 @@ def readable_records(team:)
8080 # Problem自体は常時見れるがProblemBody(問題文)はそうではない
8181 return all if %w[ Category Problem ] . include? ( klass )
8282
83- # 見学者なら一部のテーブルを除き全レコード取得可能
84- return all if team . audience? && %w[ Category Problem ProblemBody ProblemSupplement Team ] . include? ( klass )
85- return where ( team : [ nil ] ) if team . audience? && %w[ Notice ] . include? ( klass )
83+ # 見学者(NETCON guest)には以下のルールで取得させる
84+ if team . audience?
85+ case klass
86+ when 'Team'
87+ # 参加者と同じ権限でチームの確認が可能
88+ return where ( role : -Float ::INFINITY ..Team . roles [ team . role ] )
89+ when 'Category'
90+ # Categoryは常に取得可能
91+ return all
92+ when 'ProblemBody' , 'ProblemSupplement'
93+ return where ( problem : Problem . opened ( team : team ) )
94+ when 'ProblemEnvironment'
95+ # 勝手に別の参加者の問題環境が見えないようにするために取得不可
96+ return none
97+ when 'Notice'
98+ # 通知は全体宛のもののみ取得可能
99+ return where ( team : [ nil ] )
100+ else
101+ # 他のパラメータは取得不可
102+ return none
103+ end
104+ end
86105
87106 case klass
88107 when 'Answer'
@@ -91,7 +110,7 @@ def readable_records(team:)
91110 # レコードが取得不可でもtokenがあればデータ本体は取得可能
92111 where ( team : team )
93112 when 'Score'
94- return none if ! team . staff? && Config . hide_all_score
113+ return none if Config . hide_all_score
95114
96115 # joins(:answer).merge(Answer.delay_filter).where(answers: { team: team })
97116 where ( answer : Answer . readable_records ( team : team ) . delay_filter )
@@ -104,12 +123,9 @@ def readable_records(team:)
104123 when 'ProblemBody' , 'ProblemSupplement'
105124 where ( problem : Problem . opened ( team : team ) )
106125 when 'ProblemEnvironment'
107- # グローバル問題で共通の環境を作ることがあるため、audienceには完全非公開
108- return none if team . audience?
109-
110126 # playerには割り当てられた問題環境しか見せない
111127 # NOTE: 'UNDER_SCORING' 状態のVMは見えないことが望ましいが、採点中のVMがあることをUIが知るすべとして暫定的にこうしている
112- where ( team : team , problem : Problem . opened ( team : team ) , status : [ ' UNDER_CHALLENGE' , ' UNDER_SCORING' ] )
128+ where ( team : team , problem : Problem . opened ( team : team ) , status : %w[ UNDER_CHALLENGE UNDER_SCORING ] )
113129 when 'Team'
114130 # 自分以下の権限のチームを取得できる
115131 where ( role : -Float ::INFINITY ..Team . roles [ team . role ] )
0 commit comments