Skip to content

Commit 663cbfc

Browse files
committed
観客用の権限周りを整理し直した
1 parent 4c8e849 commit 663cbfc

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

api/app/models/concerns/readable.rb

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)