Add moderator role and add pundit policies for admin actions (#5635)
* Add moderator role and add pundit policies for admin actions * Add rake task for turning user into mod and revoking it again * Fix handling of unauthorized exception * Deliver new report e-mails to staff, not just admins * Add promote/demote to admin UI, hide some actions conditionally * Fix unused i18n
This commit is contained in:
parent
2b1190065c
commit
7bb8b0b2fc
44 changed files with 539 additions and 91 deletions
|
@ -46,6 +46,7 @@ ignore_missing:
|
|||
- 'terms.body_html'
|
||||
- 'application_mailer.salutation'
|
||||
- 'errors.500'
|
||||
|
||||
ignore_unused:
|
||||
- 'activemodel.errors.*'
|
||||
- 'activerecord.attributes.*'
|
||||
|
@ -58,3 +59,4 @@ ignore_unused:
|
|||
- 'errors.messages.*'
|
||||
- 'activerecord.errors.models.doorkeeper/*'
|
||||
- 'errors.429'
|
||||
- 'admin.accounts.roles.*'
|
||||
|
|
|
@ -62,6 +62,7 @@ en:
|
|||
by_domain: Domain
|
||||
confirm: Confirm
|
||||
confirmed: Confirmed
|
||||
demote: Demote
|
||||
disable: Disable
|
||||
disable_two_factor_authentication: Disable 2FA
|
||||
disabled: Disabled
|
||||
|
@ -101,6 +102,7 @@ en:
|
|||
outbox_url: Outbox URL
|
||||
perform_full_suspension: Perform full suspension
|
||||
profile_url: Profile URL
|
||||
promote: Promote
|
||||
protocol: Protocol
|
||||
public: Public
|
||||
push_subscription_expires: PuSH subscription expires
|
||||
|
@ -108,6 +110,11 @@ en:
|
|||
reset: Reset
|
||||
reset_password: Reset password
|
||||
resubscribe: Resubscribe
|
||||
role: Permissions
|
||||
roles:
|
||||
admin: Administrator
|
||||
moderator: Moderator
|
||||
user: User
|
||||
salmon_url: Salmon URL
|
||||
search: Search
|
||||
shared_inbox_url: Shared Inbox URL
|
||||
|
|
|
@ -20,16 +20,16 @@ SimpleNavigation::Configuration.run do |navigation|
|
|||
development.item :your_apps, safe_join([fa_icon('list fw'), t('settings.your_apps')]), settings_applications_url, highlights_on: %r{/settings/applications}
|
||||
end
|
||||
|
||||
primary.item :admin, safe_join([fa_icon('cogs fw'), t('admin.title')]), admin_reports_url, if: proc { current_user.admin? } do |admin|
|
||||
primary.item :admin, safe_join([fa_icon('cogs fw'), t('admin.title')]), admin_reports_url, if: proc { current_user.staff? } do |admin|
|
||||
admin.item :reports, safe_join([fa_icon('flag fw'), t('admin.reports.title')]), admin_reports_url, highlights_on: %r{/admin/reports}
|
||||
admin.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_url, highlights_on: %r{/admin/accounts}
|
||||
admin.item :instances, safe_join([fa_icon('cloud fw'), t('admin.instances.title')]), admin_instances_url, highlights_on: %r{/admin/instances}
|
||||
admin.item :subscriptions, safe_join([fa_icon('paper-plane-o fw'), t('admin.subscriptions.title')]), admin_subscriptions_url
|
||||
admin.item :domain_blocks, safe_join([fa_icon('lock fw'), t('admin.domain_blocks.title')]), admin_domain_blocks_url, highlights_on: %r{/admin/domain_blocks}
|
||||
admin.item :email_domain_blocks, safe_join([fa_icon('envelope fw'), t('admin.email_domain_blocks.title')]), admin_email_domain_blocks_url, highlights_on: %r{/admin/email_domain_blocks}
|
||||
admin.item :sidekiq, safe_join([fa_icon('diamond fw'), 'Sidekiq']), sidekiq_url, link_html: { target: 'sidekiq' }
|
||||
admin.item :pghero, safe_join([fa_icon('database fw'), 'PgHero']), pghero_url, link_html: { target: 'pghero' }
|
||||
admin.item :settings, safe_join([fa_icon('cogs fw'), t('admin.settings.title')]), edit_admin_settings_url
|
||||
admin.item :instances, safe_join([fa_icon('cloud fw'), t('admin.instances.title')]), admin_instances_url, highlights_on: %r{/admin/instances}, if: -> { current_user.admin? }
|
||||
admin.item :subscriptions, safe_join([fa_icon('paper-plane-o fw'), t('admin.subscriptions.title')]), admin_subscriptions_url, if: -> { current_user.admin? }
|
||||
admin.item :domain_blocks, safe_join([fa_icon('lock fw'), t('admin.domain_blocks.title')]), admin_domain_blocks_url, highlights_on: %r{/admin/domain_blocks}, if: -> { current_user.admin? }
|
||||
admin.item :email_domain_blocks, safe_join([fa_icon('envelope fw'), t('admin.email_domain_blocks.title')]), admin_email_domain_blocks_url, highlights_on: %r{/admin/email_domain_blocks}, if: -> { current_user.admin? }
|
||||
admin.item :sidekiq, safe_join([fa_icon('diamond fw'), 'Sidekiq']), sidekiq_url, link_html: { target: 'sidekiq' }, if: -> { current_user.admin? }
|
||||
admin.item :pghero, safe_join([fa_icon('database fw'), 'PgHero']), pghero_url, link_html: { target: 'pghero' }, if: -> { current_user.admin? }
|
||||
admin.item :settings, safe_join([fa_icon('cogs fw'), t('admin.settings.title')]), edit_admin_settings_url, if: -> { current_user.admin? }
|
||||
admin.item :custom_emojis, safe_join([fa_icon('smile-o fw'), t('admin.custom_emojis.title')]), admin_custom_emojis_url, highlights_on: %r{/admin/custom_emojis}
|
||||
end
|
||||
|
||||
|
|
|
@ -137,6 +137,13 @@ Rails.application.routes.draw do
|
|||
resource :suspension, only: [:create, :destroy]
|
||||
resource :confirmation, only: [:create]
|
||||
resources :statuses, only: [:index, :create, :update, :destroy]
|
||||
|
||||
resource :role do
|
||||
member do
|
||||
post :promote
|
||||
post :demote
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
resources :users, only: [] do
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue