* Bulk Assign Roles UI * Renaming roles to role * Added role to multiple users without using note. * Role note added * Role blank key fix * Removed roles * typo fix * AuditLog Added * Optimising code * Good standing role issue * Good standing role issue fix * Minor PR changes based on review * Added cypress tests * Added spec tests for BulkAssignRole * Minor fixes
70 lines
2.1 KiB
Ruby
70 lines
2.1 KiB
Ruby
module Admin
|
|
class BulkAssignRoleController < Admin::ApplicationController
|
|
layout "admin"
|
|
include Admin::UsersHelper
|
|
|
|
def assign_role
|
|
if permitted_params[:role].blank?
|
|
raise ArgumentError,
|
|
I18n.t("admin.bulk_assign_role_controller.role_blank")
|
|
end
|
|
|
|
role = permitted_params[:role]
|
|
usernames = permitted_params[:usernames].downcase.split(/\s*,\s*/)
|
|
note = permitted_params[:note_for_current_role].presence
|
|
note ||= I18n.t("admin.bulk_assign_role_controller.role_assigment", role: role)
|
|
|
|
begin
|
|
usernames.each do |username|
|
|
user = User.find_by(username: username)
|
|
user_action_status = user_action_status(user, role)
|
|
if user
|
|
Moderator::ManageActivityAndRoles.handle_user_roles(
|
|
admin: current_user,
|
|
user: user,
|
|
user_params: { user_status: role, note_for_current_role: note },
|
|
)
|
|
end
|
|
|
|
AuditLog.create(
|
|
category: "admin.bulk_assign_role.add_role",
|
|
user: current_user,
|
|
roles: current_user.roles_name,
|
|
slug: "bulk_assign_role",
|
|
data: {
|
|
role: role,
|
|
username: username,
|
|
user_action_status: user_action_status
|
|
},
|
|
)
|
|
end
|
|
flash[:success] = I18n.t("admin.bulk_assign_role_controller.success_message")
|
|
rescue StandardError => e
|
|
flash[:danger] = e.message
|
|
end
|
|
redirect_to admin_bulk_assign_role_index_path
|
|
rescue ArgumentError => e
|
|
flash[:danger] = e.message
|
|
redirect_to admin_bulk_assign_role_index_path
|
|
end
|
|
|
|
private
|
|
|
|
# We need to override this method from Admin::ApplicationController since
|
|
# there is no resource to authorize.
|
|
def authorization_resource; end
|
|
|
|
def user_action_status(user, role)
|
|
if user
|
|
return "user_already_has_the_role" if user_status(user) == role
|
|
|
|
return "role_applied_successfully"
|
|
end
|
|
"user_not_found"
|
|
end
|
|
|
|
def permitted_params
|
|
params.permit(:usernames, :role, :note_for_current_role)
|
|
end
|
|
end
|
|
end
|