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 i18nmaster
parent
2b1190065c
commit
7bb8b0b2fc
@ -1,31 +1,41 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
class Admin::AccountModerationNotesController < Admin::BaseController |
||||
def create |
||||
@account_moderation_note = current_account.account_moderation_notes.new(resource_params) |
||||
if @account_moderation_note.save |
||||
@target_account = @account_moderation_note.target_account |
||||
redirect_to admin_account_path(@target_account.id), notice: I18n.t('admin.account_moderation_notes.created_msg') |
||||
else |
||||
@account = @account_moderation_note.target_account |
||||
@moderation_notes = @account.targeted_moderation_notes.latest |
||||
render template: 'admin/accounts/show' |
||||
module Admin |
||||
class AccountModerationNotesController < BaseController |
||||
before_action :set_account_moderation_note, only: [:destroy] |
||||
|
||||
def create |
||||
authorize AccountModerationNote, :create? |
||||
|
||||
@account_moderation_note = current_account.account_moderation_notes.new(resource_params) |
||||
|
||||
if @account_moderation_note.save |
||||
redirect_to admin_account_path(@account_moderation_note.target_account_id), notice: I18n.t('admin.account_moderation_notes.created_msg') |
||||
else |
||||
@account = @account_moderation_note.target_account |
||||
@moderation_notes = @account.targeted_moderation_notes.latest |
||||
|
||||
render template: 'admin/accounts/show' |
||||
end |
||||
end |
||||
end |
||||
|
||||
def destroy |
||||
@account_moderation_note = AccountModerationNote.find(params[:id]) |
||||
@target_account = @account_moderation_note.target_account |
||||
@account_moderation_note.destroy |
||||
redirect_to admin_account_path(@target_account.id), notice: I18n.t('admin.account_moderation_notes.destroyed_msg') |
||||
end |
||||
def destroy |
||||
authorize @account_moderation_note, :destroy? |
||||
@account_moderation_note.destroy |
||||
redirect_to admin_account_path(@account_moderation_note.target_account_id), notice: I18n.t('admin.account_moderation_notes.destroyed_msg') |
||||
end |
||||
|
||||
private |
||||
private |
||||
|
||||
def resource_params |
||||
params.require(:account_moderation_note).permit( |
||||
:content, |
||||
:target_account_id |
||||
) |
||||
def resource_params |
||||
params.require(:account_moderation_note).permit( |
||||
:content, |
||||
:target_account_id |
||||
) |
||||
end |
||||
|
||||
def set_account_moderation_note |
||||
@account_moderation_note = AccountModerationNote.find(params[:id]) |
||||
end |
||||
end |
||||
end |
||||
|
@ -0,0 +1,25 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
module Admin |
||||
class RolesController < BaseController |
||||
before_action :set_user |
||||
|
||||
def promote |
||||
authorize @user, :promote? |
||||
@user.promote! |
||||
redirect_to admin_account_path(@user.account_id) |
||||
end |
||||
|
||||
def demote |
||||
authorize @user, :demote? |
||||
@user.demote! |
||||
redirect_to admin_account_path(@user.account_id) |
||||
end |
||||
|
||||
private |
||||
|
||||
def set_user |
||||
@user = Account.find(params[:account_id]).user || raise(ActiveRecord::RecordNotFound) |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,17 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
class AccountModerationNotePolicy < ApplicationPolicy |
||||
def create? |
||||
staff? |
||||
end |
||||
|
||||
def destroy? |
||||
admin? || owner? |
||||
end |
||||
|
||||
private |
||||
|
||||
def owner? |
||||
record.account_id == current_account&.id |
||||
end |
||||
end |
@ -0,0 +1,43 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
class AccountPolicy < ApplicationPolicy |
||||
def index? |
||||
staff? |
||||
end |
||||
|
||||
def show? |
||||
staff? |
||||
end |
||||
|
||||
def suspend? |
||||
staff? && !record.user&.staff? |
||||
end |
||||
|
||||
def uns |