From 24e26d8b7a4a2487600f273f7b1a6236691d2664 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 27 Aug 2013 20:40:42 +0300 Subject: [PATCH] Improve user block/removal from admin area Provide UI with explanation what happens when you block or remove user When remove user - remove all groups where user is an only owner --- app/controllers/admin/users_controller.rb | 10 ++---- app/models/group.rb | 2 +- app/models/user.rb | 8 ++++- app/views/admin/users/show.html.haml | 44 +++++++++++++++-------- 4 files changed, 41 insertions(+), 23 deletions(-) diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index eeedc764078..7809a157dbc 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -83,14 +83,10 @@ class Admin::UsersController < Admin::ApplicationController end def destroy - # 1. Move all user groups to admin - user.own_groups.each do |group| - group.owner_id = User.admins.first - group.save - end + # 1. Remove groups where user is the only owner + user.solo_owned_groups.map(&:destroy) - # 2. Remove user with all authored contenst - # including personal projects + # 2. Remove user with all authored content including personal projects user.destroy respond_to do |format| diff --git a/app/models/group.rb b/app/models/group.rb index 1c8eb98e0f2..fce8d71217b 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -23,7 +23,7 @@ class Group < Namespace end def owners - @owners ||= (users_groups.owners.map(&:user) << owner) + @owners ||= (users_groups.owners.map(&:user) << owner).uniq end def add_users(user_ids, group_access) diff --git a/app/models/user.rb b/app/models/user.rb index e2c1580ffcf..b44c063c32f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -135,7 +135,7 @@ class User < ActiveRecord::Base # Remove user from all groups user.users_groups.find_each do |membership| # skip owned resources - next if membership.group.owner == user + next if membership.group.owners.include?(user) return false unless membership.destroy end @@ -376,4 +376,10 @@ class User < ActiveRecord::Base self.send("#{attr}=", Sanitize.clean(value)) if value.present? end end + + def solo_owned_groups + @solo_owned_groups ||= owned_groups.select do |group| + group.owners == [self] + end + end end diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml index d1b882072e8..bf41508d27b 100644 --- a/app/views/admin/users/show.html.haml +++ b/app/views/admin/users/show.html.haml @@ -10,11 +10,8 @@ = link_to edit_admin_user_path(@user), class: "btn grouped" do %i.icon-edit Edit - - unless @user == current_user - - if @user.blocked? - = link_to 'Unblock', unblock_admin_user_path(@user), method: :put, class: "btn grouped success" - - else - = link_to 'Block', block_admin_user_path(@user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn grouped btn-remove" + - if @user.blocked? + = link_to 'Unblock', unblock_admin_user_path(@user), method: :put, class: "btn grouped success" %hr .row @@ -62,15 +59,34 @@ %strong = link_to @user.created_by.name, [:admin, @user.created_by] - .alert.alert-error - %h4 Remove user - %br - %p Deleting a user has the following effects: - %ul - %li All user content like authored issues, snippets, comments will be removed - %li User personal projects will be removed and cannot be restored - %li Owned groups will be transfered to first admin - = link_to 'Remove user', [:admin, @user], confirm: "USER #{@user.name} WILL BE REMOVED! Are you sure?", method: :delete, class: "btn btn-remove" + - unless @user == current_user + .alert + %h4 Block user + %br + %p Blocking user has the following effects: + %ul + %li User will not be able to login + %li User will not be able to access git repositories + %li User will be removed from joined projects and groups + %li Personal projects will be left + %li Owned groups will be left + = link_to 'Block user', block_admin_user_path(@user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn btn-remove" + + .alert.alert-error + %h4 + Remove user + %br + %p Deleting a user has the following effects: + %ul + %li All user content like authored issues, snippets, comments will be removed + - rp = @user.personal_projects.count + - unless rp.zero? + %li #{pluralize rp, 'personal project'} will be removed and cannot be restored + - if @user.solo_owned_groups.present? + %li + Next groups with all content will be removed: + %strong #{@user.solo_owned_groups.map(&:name).join(', ')} + = link_to 'Remove user', [:admin, @user], confirm: "USER #{@user.name} WILL BE REMOVED! Are you sure?", method: :delete, class: "btn btn-remove" .span6 - if @user.users_groups.present? -- GitLab