docbrown/app/policies/user_policy.rb
Anna Buianova 473594f192
Match spam role with existing suspended actions (#20477)
* Started matching spam and suspended roles

* Match spam and suspended roles in most cases

* Fixed check_suspended for unauthenticated users
2023-12-27 20:12:50 +00:00

118 lines
2.4 KiB
Ruby

class UserPolicy < ApplicationPolicy
PERMITTED_ATTRIBUTES = %i[
reaction_notifications
available_for
bg_color_hex
config_font
config_theme
config_navbar
current_password
currently_hacking_on
currently_learning
display_announcements
display_sponsors
editor_version education email
email_badge_notifications
email_comment_notifications
email_community_mod_newsletter
email_digest_periodic
email_follower_notifications
email_membership_newsletter
email_mention_notifications
email_newsletter
email_public
email_tag_mod_newsletter
email_unread_notifications
employer_name
employer_url
employment_title
experience_level
export_requested
feed_mark_canonical
feed_referential_link
feed_url
inbox_guidelines
inbox_type
mobile_comment_notifications
mod_roundrobin_notifications
welcome_notifications
name
password
password_confirmation
payment_pointer
permit_adjacent_sponsors
profile_image
text_color_hex
username
].freeze
def edit?
current_user?
end
alias remove_identity? edit?
alias update_password? edit?
# The analytics? policy method is also on the OrganizationPolicy. This exists specifically to allow for
# "duck-typing" on the tests.
alias analytics? edit?
def onboarding_update?
true
end
alias onboarding_checkbox_update? onboarding_update?
alias onboarding_notifications_checkbox_update? onboarding_update?
def update?
edit? && !user.spam_or_suspended?
end
alias destroy? edit?
alias confirm_destroy? edit?
alias full_delete? edit?
alias request_destroy? edit?
def join_org?
!user.spam_or_suspended?
end
def leave_org?
OrganizationMembership.exists?(user_id: user.id, organization_id: record.id)
end
def dashboard_show?
current_user? || user_super_admin? || user_any_admin?
end
def elevated_user?
user_any_admin? || user_super_moderator?
end
alias toggle_suspension_status? elevated_user?
alias manage_user_roles? elevated_user?
alias unpublish_all_articles? elevated_user?
alias search_by_email? elevated_user?
def moderation_routes?
(user.has_trusted_role? || elevated_user?) && !user.spam_or_suspended?
end
def permitted_attributes
PERMITTED_ATTRIBUTES
end
private
def not_self?
user != record
end
def current_user?
user == record
end
end