Skip to content

Commit 89b85fa

Browse files
iHiDclaude
andauthored
Guard against nil user in Mentor::Discussion#viewable_by? (#8623)
When an unauthenticated user subscribes to DiscussionPostListChannel, current_user is nil. Use safe navigation operator (&.) to prevent NoMethodError when calling admin? on nil. Closes #8622 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 52918e4 commit 89b85fa

2 files changed

Lines changed: 8 additions & 2 deletions

File tree

app/models/mentor/discussion.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,13 @@ def finished_for_mentor? = %i[mentor_finished finished student_timed_out mentor_
9595
def timed_out? = %i[student_timed_out mentor_timed_out].include?(status)
9696

9797
def viewable_by?(user)
98-
return true if user.admin?
98+
return true if user&.admin?
9999

100100
[mentor, student].include?(user)
101101
end
102102

103103
def viewable_by_mentor?(user)
104-
return true if user.admin?
104+
return true if user&.admin?
105105

106106
user == mentor
107107
end

test/models/mentor/discussion_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,12 @@ class Mentor::DiscussionTest < ActiveSupport::TestCase
8282
refute discussion.viewable_by?(user)
8383
end
8484

85+
test "#viewable_by? returns false if user is nil" do
86+
discussion = create :mentor_discussion
87+
88+
refute discussion.viewable_by?(nil)
89+
end
90+
8591
test "finished?" do
8692
skip # TODO: Can this be deleted?
8793
discussion = create :mentor_discussion

0 commit comments

Comments
 (0)