about summary refs log tree commit diff
path: root/app/policies/status_policy.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/policies/status_policy.rb')
-rw-r--r--app/policies/status_policy.rb12
1 files changed, 9 insertions, 3 deletions
diff --git a/app/policies/status_policy.rb b/app/policies/status_policy.rb
index 56c217cec..c16ec29ed 100644
--- a/app/policies/status_policy.rb
+++ b/app/policies/status_policy.rb
@@ -18,10 +18,12 @@ class StatusPolicy < ApplicationPolicy
 
     if requires_mention?
       owned? || mention_exists?
+    elsif author.private? && public?
+      !(author_blocking? || author_blocking_domain?)
     elsif private?
       owned? || following_author? || mention_exists?
     else
-      current_account.nil? || (!author_blocking? && !author_blocking_domain?)
+      current_account.nil? || !(author_blocking? || author_blocking_domain?)
     end
   end
 
@@ -80,7 +82,7 @@ class StatusPolicy < ApplicationPolicy
   end
 
   def author_blocking?
-    return author.require_auth? if current_account.nil?
+    return false if current_account.nil?
 
     @preloaded_relations[:blocked_by] ? @preloaded_relations[:blocked_by][author.id] : author.blocking?(current_account)
   end
@@ -94,7 +96,7 @@ class StatusPolicy < ApplicationPolicy
   def author
     record.account
   end
-  
+
   def local_only?
     record.local_only?
   end
@@ -103,6 +105,10 @@ class StatusPolicy < ApplicationPolicy
     record.published?
   end
 
+  def public?
+    record.public_visibility? || record.unlisted_visibility?
+  end
+
   def visibility_for_remote_domain
     @visibility_for_domain ||= record.visibility_for_domain(current_account&.domain)
   end