Skip to content

Commit c4ab9be

Browse files
committed
Fix paste visibility rules and messages
1 parent 8688ccc commit c4ab9be

File tree

4 files changed

+28
-6
lines changed

4 files changed

+28
-6
lines changed

app/controllers/solutions_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def show
1616
authorize! :read, @solution
1717
rescue CanCan::AccessDenied
1818
if current_user.guest?
19-
return respond_access_denied('Please log in to view the model solution.')
19+
raise CanCan::AccessDenied
2020
elsif current_user.teacher?(@organization) || current_user.assistant?(@course)
2121
return respond_access_denied("You can't see model solutions until organization is verified by administrator")
2222
else

app/controllers/submissions_controller.rb

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ def index
3030
end
3131

3232
def show
33+
if current_user.guest?
34+
raise CanCan::AccessDenied
35+
end
36+
3337
@course ||= @submission.course
3438
@exercise ||= @submission.exercise
3539
@organization = @course.organization
@@ -310,14 +314,30 @@ def index_json_datatables
310314
end
311315

312316
def check_access!
317+
paste_visible = @submission.paste_visible_for?(current_user)
313318
paste_visibility = @course.paste_visibility || 'open'
314319
case paste_visibility
315320
when 'protected'
316-
respond_access_denied unless can?(:teach, @course) || @submission.user_id.to_s == current_user.id.to_s || (@submission.public? && @submission.exercise.completed_by?(current_user))
321+
respond_access_denied unless can?(:teach, @course) || @submission.user_id.to_s == current_user.id.to_s || paste_visible
317322
when 'no-tests-public'
318323
respond_access_denied unless can?(:teach, @course) || @submission.created_at > 2.hours.ago || @submission.user_id.to_s == current_user.id.to_s
319324
else
320-
respond_access_denied unless can?(:teach, @course) || @submission.user_id.to_s == current_user.id.to_s || (@submission.public? && @submission.created_at > 2.hours.ago)
325+
return if can?(:teach, @course) || @submission.user_id.to_s == current_user.id.to_s
326+
if @submission.created_at < 2.hours.ago
327+
return
328+
else
329+
unless paste_visible
330+
if @submission.exercise && !@submission.exercise.completed_by?(current_user)
331+
respond_access_denied("You cannot see this paste because you haven't completed this exercise.")
332+
return
333+
else
334+
respond_access_denied("You cannot see this paste because it was created over 2 hours ago.")
335+
end
336+
return
337+
end
338+
end
339+
340+
respond_access_denied("You cannot see this paste because all tests passed.") unless paste_visible
321341
end
322342
end
323343
end

app/models/submission.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,10 @@ def self.eager_load_exercises(submissions)
343343
end
344344
end
345345

346-
def public?
347-
paste_available && !all_tests_passed
346+
def paste_visible_for?(user)
347+
return false unless paste_available
348+
return true if exercise && exercise.completed_by?(user)
349+
!all_tests_passed
348350
end
349351

350352
def readable_by?(user)

app/views/files/index.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<h1><%= @title %>
2-
<% if @submission.public? and current_user.administrator? %>
2+
<% if @submission.paste_visible_for?(current_user) and current_user.administrator? %>
33
- <span class="error"> This submission is public</span>
44
<% end %>
55
</h1>

0 commit comments

Comments
 (0)