diff options
Diffstat (limited to 'app/policies/status_policy.rb')
-rw-r--r-- | app/policies/status_policy.rb | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/app/policies/status_policy.rb b/app/policies/status_policy.rb index d0359580d..56c217cec 100644 --- a/app/policies/status_policy.rb +++ b/app/policies/status_policy.rb @@ -13,7 +13,8 @@ class StatusPolicy < ApplicationPolicy def show? return false if author.suspended? - return false if local_only? && (current_account.nil? || !current_account.local?) + return false if local_only? && !current_account&.local? + return false unless published? || owned? if requires_mention? owned? || mention_exists? @@ -25,7 +26,7 @@ class StatusPolicy < ApplicationPolicy end def reblog? - !requires_mention? && (!private? || owned?) && show? && !blocking_author? + published? && !requires_mention? && (!private? || owned?) && show? && !blocking_author? end def favourite? @@ -45,7 +46,7 @@ class StatusPolicy < ApplicationPolicy private def requires_mention? - record.direct_visibility? || record.limited_visibility? + %w(direct limited).include?(visibility_for_remote_domain) end def owned? @@ -53,7 +54,7 @@ class StatusPolicy < ApplicationPolicy end def private? - record.private_visibility? + visibility_for_remote_domain == 'private' end def mention_exists? @@ -79,7 +80,7 @@ class StatusPolicy < ApplicationPolicy end def author_blocking? - return false if current_account.nil? + return author.require_auth? if current_account.nil? @preloaded_relations[:blocked_by] ? @preloaded_relations[:blocked_by][author.id] : author.blocking?(current_account) end @@ -97,4 +98,12 @@ class StatusPolicy < ApplicationPolicy def local_only? record.local_only? end + + def published? + record.published? + end + + def visibility_for_remote_domain + @visibility_for_domain ||= record.visibility_for_domain(current_account&.domain) + end end |