File tree Expand file tree Collapse file tree 4 files changed +28
-6
lines changed Expand file tree Collapse file tree 4 files changed +28
-6
lines changed Original file line number Diff line number Diff line change @@ -16,7 +16,7 @@ def show
16
16
authorize! :read , @solution
17
17
rescue CanCan ::AccessDenied
18
18
if current_user . guest?
19
- return respond_access_denied ( 'Please log in to view the model solution.' )
19
+ raise CanCan :: AccessDenied
20
20
elsif current_user . teacher? ( @organization ) || current_user . assistant? ( @course )
21
21
return respond_access_denied ( "You can't see model solutions until organization is verified by administrator" )
22
22
else
Original file line number Diff line number Diff line change @@ -30,6 +30,10 @@ def index
30
30
end
31
31
32
32
def show
33
+ if current_user . guest?
34
+ raise CanCan ::AccessDenied
35
+ end
36
+
33
37
@course ||= @submission . course
34
38
@exercise ||= @submission . exercise
35
39
@organization = @course . organization
@@ -310,14 +314,30 @@ def index_json_datatables
310
314
end
311
315
312
316
def check_access!
317
+ paste_visible = @submission . paste_visible_for? ( current_user )
313
318
paste_visibility = @course . paste_visibility || 'open'
314
319
case paste_visibility
315
320
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
317
322
when 'no-tests-public'
318
323
respond_access_denied unless can? ( :teach , @course ) || @submission . created_at > 2 . hours . ago || @submission . user_id . to_s == current_user . id . to_s
319
324
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
321
341
end
322
342
end
323
343
end
Original file line number Diff line number Diff line change @@ -343,8 +343,10 @@ def self.eager_load_exercises(submissions)
343
343
end
344
344
end
345
345
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
348
350
end
349
351
350
352
def readable_by? ( user )
Original file line number Diff line number Diff line change 1
1
< h1 > <%= @title %>
2
- <% if @submission . public? and current_user . administrator? %>
2
+ <% if @submission . paste_visible_for? ( current_user ) and current_user . administrator? %>
3
3
- < span class ="error "> This submission is public</ span >
4
4
<% end %>
5
5
</ h1 >
You can’t perform that action at this time.
0 commit comments