File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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
323343end
Original file line number Diff line number Diff 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 )
Original file line number Diff line number Diff line change 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 >
You can’t perform that action at this time.
0 commit comments