diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 9680942..f223bf2 100755 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -2,7 +2,6 @@ class AdminController < ApplicationController before_action :administrative, if: :admin_param, except: [:get_user] skip_before_action :has_info - layout false, only: [:get_all_users] def dashboard end @@ -34,9 +33,16 @@ class AdminController < ApplicationController def update_user user = User.find_by_id(params[:admin_id]) if user - user.update(params[:user].reject { |k| k == ("password" || "password_confirmation") }) - pass = params[:user][:password] - user.password = pass if !(pass.blank?) + # VULNERABILITY: Using params[:user] directly without strong parameters + # This allows mass assignment of any user attribute including 'admin' + # See wiki: Extras:-Mass-Assignment-Admin-Role.md + user_params = params[:user].to_unsafe_h if params[:user].respond_to?(:to_unsafe_h) + user_params ||= params[:user] + + # Filter out password fields if blank to avoid validation errors + filtered_params = user_params.reject { |k, v| (k == "password" || k == "password_confirmation") && v.blank? } + + user.update(filtered_params) user.save! flash[:success] = "User updated successfully" redirect_to admin_get_all_users_path(current_user.id) diff --git a/app/views/admin/get_all_users.html.erb b/app/views/admin/get_all_users.html.erb index d262be1..1a706ad 100755 --- a/app/views/admin/get_all_users.html.erb +++ b/app/views/admin/get_all_users.html.erb @@ -1,41 +1,53 @@ -
| - Name - | -- Email - | -- Admin User - | -- Action - | -
|---|---|---|---|
| - <%= "#{u.first_name} #{u.last_name}"%> - | -- <%= u.email%> - | -- <%= u.admin ? %{ - | -- <%= link_to "Edit", admin_get_user_path(u.id), {:style => "width:70px", :class => "btn btn-inverse"}%> - | -
View and manage all system users
+| Name | +Admin User | +Action | +|
|---|---|---|---|
| + <%= "#{u.first_name} #{u.last_name}" %> + | ++ <%= u.email %> + | ++ <%= u.admin ? ''.html_safe : ''.html_safe %> + | ++ <%= link_to admin_get_user_path(u.id), class: "btn btn-sm btn-outline-primary" do %> + Edit + <% end %> + | +