Skip to content
Snippets Groups Projects
Commit c9def945 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

User blocking improved. Admin area styled

parent c0df0cd7
No related branches found
No related tags found
No related merge requests found
v 2.4.0
- Ability to block user
- Simplified dashboard area
- Improved admin area
- Accept merge request
- Bootstrap 2.0
- Responsive layout
- Big commits handling
- Perfomance improved
- Milestones
 
v 2.3.1
- Issues pagination
Loading
Loading
Loading
Loading
@@ -450,3 +450,17 @@ form {
}
 
}
table.admin-table {
@extend .table-bordered;
@extend .zebra-striped;
th {
border-color: #CCC;
border-bottom: 1px solid #bbb;
background:#eee;
background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf));
background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf);
background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf);
background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf);
}
}
Loading
Loading
@@ -4,7 +4,9 @@ class Admin::UsersController < ApplicationController
before_filter :authenticate_admin!
 
def index
@admin_users = User.page(params[:page])
@admin_users = User.scoped
@admin_users = @admin_users.filter(params[:filter])
@admin_users = @admin_users.order("updated_at DESC").page(params[:page])
end
 
def show
Loading
Loading
@@ -38,13 +40,31 @@ class Admin::UsersController < ApplicationController
@admin_user = User.find(params[:id])
end
 
def block
@admin_user = User.find(params[:id])
if @admin_user.block
redirect_to :back, alert: "Successfully blocked"
else
redirect_to :back, alert: "Error occured. User was not blocked"
end
end
def unblock
@admin_user = User.find(params[:id])
if @admin_user.update_attribute(:blocked, false)
redirect_to :back, alert: "Successfully unblocked"
else
redirect_to :back, alert: "Error occured. User was not unblocked"
end
end
def create
admin = params[:user].delete("admin")
blocked = params[:user].delete("blocked")
 
@admin_user = User.new(params[:user])
@admin_user.admin = (admin && admin.to_i > 0)
@admin_user.blocked = blocked
 
respond_to do |format|
if @admin_user.save
Loading
Loading
@@ -59,7 +79,6 @@ class Admin::UsersController < ApplicationController
 
def update
admin = params[:user].delete("admin")
blocked = params[:user].delete("blocked")
 
if params[:user][:password].blank?
params[:user].delete(:password)
Loading
Loading
@@ -68,7 +87,6 @@ class Admin::UsersController < ApplicationController
 
@admin_user = User.find(params[:id])
@admin_user.admin = (admin && admin.to_i > 0)
@admin_user.blocked = blocked
 
respond_to do |format|
if @admin_user.update_attributes(params[:user])
Loading
Loading
class ApplicationController < ActionController::Base
before_filter :authenticate_user!
before_filter :reject_blocked!
before_filter :set_current_user_for_mailer
protect_from_forgery
helper_method :abilities, :can?
Loading
Loading
@@ -16,6 +17,14 @@ class ApplicationController < ActionController::Base
 
protected
 
def reject_blocked!
if current_user && current_user.blocked
sign_out current_user
flash[:alert] = "Your account was blocked"
redirect_to new_user_session_path
end
end
def after_sign_in_path_for resource
if resource.is_a?(User) && resource.respond_to?(:blocked) && resource.blocked
sign_out resource
Loading
Loading
Loading
Loading
@@ -48,7 +48,25 @@ class User < ActiveRecord::Base
 
before_create :ensure_authentication_token
alias_attribute :private_token, :authentication_token
scope :not_in_project, lambda { |project| where("id not in (:ids)", :ids => project.users.map(&:id) ) }
scope :admins, where(:admin => true)
scope :blocked, where(:blocked => true)
scope :active, where(:blocked => false)
def self.filter filter_name
case filter_name
when "admins"; self.admins
when "blocked"; self.blocked
when "wop"; self.without_projects
else
self.active
end
end
def self.without_projects
where('id NOT IN (SELECT DISTINCT(user_id) FROM users_projects)')
end
 
def identifier
email.gsub /[@.]/, "_"
Loading
Loading
@@ -58,6 +76,7 @@ class User < ActiveRecord::Base
admin
end
 
def require_ssh_key?
keys.count == 0
end
Loading
Loading
@@ -101,6 +120,17 @@ class User < ActiveRecord::Base
def project_ids
projects.map(&:id)
end
# Remove user from all projects and
# set blocked attribute to true
def block
users_projects.all.each do |membership|
return false unless membership.destroy
end
self.blocked = true
save
end
end
# == Schema Information
#
Loading
Loading
Loading
Loading
@@ -2,7 +2,7 @@
Projects
= link_to 'New Project', new_admin_project_path, :class => "btn small right"
%br
%table.zebra-striped.table-bordered
%table.admin-table
%thead
%th Name
%th Path
Loading
Loading
Loading
Loading
@@ -2,9 +2,8 @@
= @admin_project.name
= link_to 'Edit', edit_admin_project_path(@admin_project), :class => "btn right small"
 
%hr
%table.zebra-striped
%br
%table.zebra-striped.table-bordered
%tr
%td
%b
Loading
Loading
@@ -29,47 +28,47 @@
Description:
%td
= @admin_project.description
%br
%h3
Team
%small
(#{@admin_project.users_projects.count})
%br
%table.zebra-striped.table-bordered
%thead
%tr
%th Name
%th Project Access
%th Repository Access
%th
 
- @admin_project.users_projects.each do |tm|
%tr
%td
= link_to tm.user_name, admin_user_path(tm.user)
%td= select_tag :tm_project_access, options_for_select(Project.access_options, tm.project_access), :class => "medium project-access-select", :disabled => :disabled
%td= link_to 'Edit Access', edit_admin_team_member_path(tm), :class => "btn small"
%td= link_to 'Remove from team', admin_team_member_path(tm), :confirm => 'Are you sure?', :method => :delete, :class => "btn danger small"
 
.span12
%h3
Team
%small
(#{@admin_project.users_projects.count})
%hr
%table.zebra-striped
%br
%h3 Add new team member
%br
= form_tag team_update_admin_project_path(@admin_project), :class => "bulk_import", :method => :put do
%table.zebra-striped.table-bordered
%thead
%tr
%th Name
%th Project Access
%th Repository Access
%th
%th Users
%th Project Access:
 
- @admin_project.users_projects.each do |tm|
%tr
%td
= link_to tm.user_name, admin_user_path(tm.user)
%td= select_tag :tm_project_access, options_for_select(Project.access_options, tm.project_access), :class => "medium project-access-select", :disabled => :disabled
%td= link_to 'Edit Access', edit_admin_team_member_path(tm), :class => "btn small"
%td= link_to 'Remove from team', admin_team_member_path(tm), :confirm => 'Are you sure?', :method => :delete, :class => "btn danger small"
= form_tag team_update_admin_project_path(@admin_project), :class => "bulk_import", :method => :put do
%table
%thead
%tr
%th Users
%th Project Access:
%th Repo Access:
%tr
%td= select_tag :user_ids, options_from_collection_for_select(@users , :id, :name), :multiple => true
%td= select_tag :project_access, options_for_select(Project.access_options), :class => "project-access-select"
%tr
%td= select_tag :user_ids, options_from_collection_for_select(@users , :id, :name), :multiple => true
%td= select_tag :project_access, options_for_select(Project.access_options), :class => "project-access-select"
 
.actions
= submit_tag 'Add', :class => "btn primary"
%tr
%td= submit_tag 'Add', :class => "btn primary"
%td
Read more about project permissions
%strong= link_to "here", help_permissions_path, :class => "vlink"
 
:css
form select {
Loading
Loading
Loading
Loading
@@ -6,41 +6,55 @@
- @admin_user.errors.full_messages.each do |msg|
%li= msg
 
.clearfix
= f.label :name
.input= f.text_field :name
.clearfix
= f.label :email
.input= f.text_field :email
.clearfix
= f.label :password
.input= f.password_field :password
.clearfix
= f.label :password_confirmation
.input= f.password_field :password_confirmation
.row
.span6
.clearfix
= f.label :name
.input
= f.text_field :name
%span.help-inline * requried
.clearfix
= f.label :email
.input
= f.text_field :email
%span.help-inline * requried
.clearfix
= f.label :password
.input= f.password_field :password
.clearfix
= f.label :password_confirmation
.input= f.password_field :password_confirmation
%hr
.clearfix
= f.label :skype
.input= f.text_field :skype
.clearfix
= f.label :linkedin
.input= f.text_field :linkedin
.clearfix
= f.label :twitter
.input= f.text_field :twitter
.span6
.clearfix
= f.label :projects_limit
.input= f.text_field :projects_limit, :class => "small_input"
 
.clearfix
= f.label :projects_limit
.input= f.text_field :projects_limit, :class => "small_input"
.clearfix
= f.label :skype
.input= f.text_field :skype
.clearfix
= f.label :linkedin
.input= f.text_field :linkedin
.clearfix
= f.label :twitter
.input= f.text_field :twitter
%hr
.clearfix
= f.label :admin do
= f.check_box :admin
%span Administrator
.clearfix
= f.label :blocked do
= f.check_box :blocked
%span Blocked
.alert
.clearfix
%p Give user ability to manage application.
= f.label :admin, :class => "checkbox" do
= f.check_box :admin
%span Administrator
- unless @admin_user.new_record?
.alert.alert-error
- if @admin_user.blocked
%span
= link_to 'Unblock', unblock_admin_user_path(@admin_user), :method => :put, :class => "btn small"
This user is blocked and is not able to login GitLab
- else
%span
= link_to 'Block', block_admin_user_path(@admin_user), :confirm => 'USER WILL BE BLOCKED! Are you sure?', :method => :put, :class => "btn small danger"
Blocked user will removed from all projects &amp; will not be able to login to GitLab.
.actions
= f.submit 'Save', :class => "btn primary"
- if @admin_user.new_record?
Loading
Loading
Loading
Loading
@@ -2,15 +2,29 @@
Users
= link_to 'New User', new_admin_user_path, :class => "btn small right"
%br
%table.zebra-striped.table-bordered
%ul.nav.nav-pills
%li{:class => "#{'active' unless params[:filter]}"}
= link_to "Active", admin_users_path
%li{:class => "#{'active' if params[:filter] == "admins"}"}
= link_to admin_users_path(:filter => "admins") do
Admins
%li{:class => "#{'active' if params[:filter] == "blocked"}"}
= link_to admin_users_path(:filter => "blocked") do
Blocked
%li{:class => "#{'active' if params[:filter] == "wop"}"}
= link_to admin_users_path(:filter => "wop") do
Without projects
%table.admin-table
%thead
%th Admin
%th Name
%th Email
%th Projects
%th Edit
%th Blocked
%th
%th
 
- @admin_users.each do |user|
%tr
Loading
Loading
@@ -18,8 +32,12 @@
%td= link_to user.name, [:admin, user]
%td= user.email
%td= user.users_projects.count
%td= check_box_tag "blocked", 1, user.blocked, :disabled => :disabled
%td= link_to 'Edit', edit_admin_user_path(user), :id => "edit_#{dom_id(user)}", :class => "btn small"
%td= link_to 'Destroy', [:admin, user], :confirm => 'Are you sure?', :method => :delete, :class => "btn small danger"
%td
- if user.blocked
= link_to 'Unblock', unblock_admin_user_path(user), :method => :put, :class => "btn small success"
- else
= link_to 'Block', block_admin_user_path(user), :confirm => 'USER WILL BE BLOCKED! Are you sure?', :method => :put, :class => "btn small danger"
%td= link_to 'Destroy', [:admin, user], :confirm => 'USER WILL BE REMOVED! Are you sure?', :method => :delete, :class => "btn small danger"
 
= paginate @admin_users, :theme => "admin"
%h3
= @admin_user.name
- if @admin_user.blocked
%small Blocked
- if @admin_user.admin
%small Administrator
= link_to 'Edit', edit_admin_user_path(@admin_user), :class => "btn small right"
 
%hr
%br
 
%table.zebra-striped
%table.zebra-striped.table-bordered
%tr
%td
%b
Loading
Loading
@@ -49,41 +53,47 @@
%td
= @admin_user.twitter
 
%h3 Projects
%hr
%table.zebra-striped
%tr
%thead
%th Name
%th Project Access
%th Repository Access
%th
%th
- @admin_user.users_projects.each do |tm|
- project = tm.project
%tr
%td= link_to project.name, admin_project_path(project)
%td= select_tag :tm_project_access, options_for_select(Project.access_options, tm.project_access), :class => "medium project-access-select", :disabled => :disabled
%td= link_to 'Edit Access', edit_admin_team_member_path(tm), :class => "btn small"
%td= link_to 'Remove from team', admin_team_member_path(tm), :confirm => 'Are you sure?', :method => :delete, :class => "btn small danger"
 
%br
%h3 Add User to Projects
%br
= form_tag team_update_admin_user_path(@admin_user), :class => "bulk_import", :method => :put do
%table
%table.table-bordered
%thead
%tr
%th Projects
%th Project Access:
%th Repo Access:
 
%tr
%td= select_tag :project_ids, options_from_collection_for_select(@projects , :id, :name), :multiple => true
%td= select_tag :project_access, options_for_select(Project.access_options), :class => "project-access-select"
 
.actions
= submit_tag 'Add', :class => "btn primary"
%tr
%td= submit_tag 'Add', :class => "btn primary"
%td
Read more about project permissions
%strong= link_to "here", help_permissions_path, :class => "vlink"
%br
- if @admin_user.projects.present?
%h3 Projects
%br
 
%table.zebra-striped.table-bordered
%tr
%thead
%th Name
%th Project Access
%th
%th
- @admin_user.users_projects.each do |tm|
- project = tm.project
%tr
%td= link_to project.name, admin_project_path(project)
%td= select_tag :tm_project_access, options_for_select(Project.access_options, tm.project_access), :class => "medium project-access-select", :disabled => :disabled
%td= link_to 'Edit Access', edit_admin_team_member_path(tm), :class => "btn small"
%td= link_to 'Remove from team', admin_team_member_path(tm), :confirm => 'Are you sure?', :method => :delete, :class => "btn small danger"
 
:css
form select {
Loading
Loading
%h3
Gitlabhq
%span.right v2.3
%span.right v2.4
%hr
%h4 Self Hosted Git Management
%h4 Fast, secure and stable solution based on Ruby on Rails & Gitolite.
Loading
Loading
Loading
Loading
@@ -7,8 +7,8 @@
.container
%nav.main_menu
= render "layouts/const_menu_links"
= link_to "Users", admin_users_path, :class => controller.controller_name == "users" ? "current" : nil
= link_to "Projects", admin_projects_path, :class => controller.controller_name == "projects" ? "current" : nil
= link_to "Users", admin_users_path, :class => controller.controller_name == "users" ? "current" : nil
= link_to "Emails", admin_emails_path, :class => controller.controller_name == "mailer" ? "current" : nil
= link_to "Resque", "/info/resque"
 
Loading
Loading
Loading
Loading
@@ -14,6 +14,8 @@ Gitlab::Application.routes.draw do
resources :users do
member do
put :team_update
put :block
put :unblock
end
end
resources :projects, :constraints => { :id => /[^\/]+/ } do
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment