diff --git a/app/controllers/list_controller.rb b/app/controllers/list_controller.rb index dd41d020e51..905f0077cb2 100644 --- a/app/controllers/list_controller.rb +++ b/app/controllers/list_controller.rb @@ -124,7 +124,7 @@ class ListController < ApplicationController def topics_by list_opts = build_topic_list_options - target_user = fetch_user_from_params({ include_inactive: current_user.try(:staff?) }, [:user_stat, :user_option]) + target_user = fetch_user_from_params({ include_inactive: current_user.try(:staff?) || (current_user && SiteSetting.show_inactive_accounts) }, [:user_stat, :user_option]) list = generate_list_for("topics_by", target_user, list_opts) list.more_topics_url = url_for(construct_url_with(:next, list_opts)) list.prev_topics_url = url_for(construct_url_with(:prev, list_opts)) diff --git a/app/controllers/user_actions_controller.rb b/app/controllers/user_actions_controller.rb index 71dd2a5a129..1efe4eb6ad1 100644 --- a/app/controllers/user_actions_controller.rb +++ b/app/controllers/user_actions_controller.rb @@ -6,7 +6,7 @@ class UserActionsController < ApplicationController per_chunk = 30 - user = fetch_user_from_params(include_inactive: current_user.try(:staff?)) + user = fetch_user_from_params(include_inactive: current_user.try(:staff?) || (current_user && SiteSetting.show_inactive_accounts)) opts = { user_id: user.id, user: user, diff --git a/app/controllers/user_badges_controller.rb b/app/controllers/user_badges_controller.rb index 11ca9878fee..cd456a8c40f 100644 --- a/app/controllers/user_badges_controller.rb +++ b/app/controllers/user_badges_controller.rb @@ -30,7 +30,7 @@ class UserBadgesController < ApplicationController def username params.permit [:grouped] - user = fetch_user_from_params + user = fetch_user_from_params(include_inactive: current_user.try(:staff?) || (current_user && SiteSetting.show_inactive_accounts)) user_badges = user.user_badges if params[:grouped] diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index db3182bc5ba..9212c05632a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -39,7 +39,7 @@ class UsersController < ApplicationController return redirect_to path('/login') if SiteSetting.hide_user_profiles_from_public && !current_user @user = fetch_user_from_params( - { include_inactive: current_user.try(:staff?) }, + { include_inactive: current_user.try(:staff?) || (current_user && SiteSetting.show_inactive_accounts) }, [{ user_profile: :card_image_badge }] ) @@ -203,14 +203,14 @@ class UsersController < ApplicationController end def summary - user = fetch_user_from_params + user = fetch_user_from_params(include_inactive: current_user.try(:staff?) || (current_user && SiteSetting.show_inactive_accounts)) summary = UserSummary.new(user, guardian) serializer = UserSummarySerializer.new(summary, scope: guardian) render_json_dump(serializer) end def invited - inviter = fetch_user_from_params + inviter = fetch_user_from_params(include_inactive: current_user.try(:staff?) || (current_user && SiteSetting.show_inactive_accounts)) offset = params[:offset].to_i || 0 filter_by = params[:filter] @@ -226,7 +226,7 @@ class UsersController < ApplicationController end def invited_count - inviter = fetch_user_from_params + inviter = fetch_user_from_params(include_inactive: current_user.try(:staff?) || (current_user && SiteSetting.show_inactive_accounts)) pending_count = Invite.find_pending_invites_count(inviter) redeemed_count = Invite.find_redeemed_invites_count(inviter) diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 798042ac972..07c38b521ff 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -1449,6 +1449,8 @@ en: hide_user_profiles_from_public: "Disable user cards, user profiles and user directory for anonymous users." + show_inactive_accounts: "Allow logged in users to browse profiles of inactive accounts." + hide_suspension_reasons: "Don't display suspension reasons publically on user profiles." user_website_domains_whitelist: "User website will be verified against these domains. Pipe-delimited list." diff --git a/config/site_settings.yml b/config/site_settings.yml index d2639e964f8..38c102a19f6 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -415,6 +415,8 @@ users: hide_user_profiles_from_public: default: false client: true + show_inactive_accounts: + default: false user_website_domains_whitelist: default: '' type: list diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index bf5b32659a1..9547316b97d 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -44,6 +44,14 @@ describe UsersController do expect(response).not_to be_success end + it 'returns success when show_inactive_accounts is true and user is logged in' do + SiteSetting.show_inactive_accounts = true + log_in_user(user) + inactive = Fabricate(:user, active: false) + get :show, params: { username: inactive.username }, format: :json + expect(response).to be_success + end + it "raises an error on invalid access" do Guardian.any_instance.expects(:can_see?).with(user).returns(false) get :show, params: { username: user.username }, format: :json