123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- # frozen_string_literal: true
- class StatusPolicy
- attr_reader :account, :status
- def initialize(account, status)
- @account = account
- @status = status
- end
- def show?
- if direct?
- owned? || status.mentions.where(account: account).exists?
- elsif private?
- owned? || account&.following?(status.account) || status.mentions.where(account: account).exists?
- else
- account.nil? || !status.account.blocking?(account)
- end
- end
- def reblog?
- !direct? && !private? && show?
- end
- def destroy?
- admin? || owned?
- end
- alias unreblog? destroy?
- private
- def admin?
- account&.user&.admin?
- end
- def direct?
- status.direct_visibility?
- end
- def owned?
- status.account.id == account&.id
- end
- def private?
- status.private_visibility?
- end
- end
|