Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
heptapod
heptapod
Commits
f72629a56f85
Commit
f72629a5
authored
Apr 16, 2012
by
Dmitriy Zaporozhets
Browse files
User blocking improved. Admin area styled
parent
809d8a72cfe1
Changes
13
Hide whitespace changes
Inline
Side-by-side
CHANGELOG
View file @
f72629a5
v 2.4.0
- Ability to block user
- Simplified dashboard area
- Improved admin area
- Accept merge request
...
...
@@ -2,4 +5,9 @@
- Accept merge request
- Bootstrap 2.0
- Responsive layout
- Big commits handling
- Perfomance improved
- Milestones
v 2.3.1
- Issues pagination
...
...
app/assets/stylesheets/gitlab_bootstrap.scss
View file @
f72629a5
...
...
@@ -450,3 +450,17 @@
}
}
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
);
}
}
app/controllers/admin/users_controller.rb
View file @
f72629a5
...
...
@@ -4,7 +4,9 @@
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
...
...
@@ -38,5 +40,25 @@
@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"
)
...
...
@@ -41,6 +63,5 @@
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
)
...
...
@@ -44,7 +65,6 @@
@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
...
...
@@ -59,7 +79,6 @@
def
update
admin
=
params
[
:user
].
delete
(
"admin"
)
blocked
=
params
[
:user
].
delete
(
"blocked"
)
if
params
[
:user
][
:password
].
blank?
params
[
:user
].
delete
(
:password
)
...
...
@@ -68,7 +87,6 @@
@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
])
...
...
app/controllers/application_controller.rb
View file @
f72629a5
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?
...
...
@@ -16,6 +17,14 @@
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
...
...
app/models/user.rb
View file @
f72629a5
...
...
@@ -48,4 +48,5 @@
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
)
)
}
...
...
@@ -51,4 +52,21 @@
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
/[@.]/
,
"_"
...
...
@@ -58,6 +76,7 @@
admin
end
def
require_ssh_key?
keys
.
count
==
0
end
...
...
@@ -101,6 +120,17 @@
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
#
...
...
app/views/admin/projects/index.html.haml
View file @
f72629a5
...
...
@@ -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
...
...
app/views/admin/projects/show.html.haml
View file @
f72629a5
...
...
@@ -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
...
...
@@ -29,7 +28,17 @@
Description:
%td
=
@admin_project
.
description
.span12
%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
...
...
@@ -35,6 +44,9 @@
%h3
Team
%small
(
#{
@admin_project
.
users_projects
.
count
}
)
-
@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"
...
...
@@ -40,6 +52,8 @@
%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
...
...
@@ -44,15 +58,5 @@
%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"
%th
Users
%th
Project Access:
...
...
@@ -58,9 +62,5 @@
=
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"
...
...
@@ -66,10 +66,9 @@
%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
{
...
...
app/views/admin/users/_form.html.haml
View file @
f72629a5
...
...
@@ -6,20 +6,36 @@
-
@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
.clearfix
=
f
.
label
:projects_limit
.input
=
f
.
text_field
:projects_limit
,
:class
=>
"small_input"
.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"
...
...
@@ -25,22 +41,20 @@
.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
&
will not be able to login to GitLab.
.actions
=
f
.
submit
'Save'
,
:class
=>
"btn primary"
-
if
@admin_user
.
new_record?
...
...
app/views/admin/users/index.html.haml
View file @
f72629a5
...
...
@@ -2,9 +2,23 @@
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
...
...
@@ -6,7 +20,8 @@
%thead
%th
Admin
%th
Name
%th
Email
%th
Projects
%th
Edit
%th
Blocked
%th
...
...
@@ -11,6 +26,5 @@
%th
Blocked
%th
%th
-
@admin_users
.
each
do
|
user
|
%tr
...
...
@@ -18,5 +32,4 @@
%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"
...
...
@@ -22,4 +35,9 @@
%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"
app/views/admin/users/show.html.haml
View file @
f72629a5
%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"
...
...
@@ -3,4 +7,4 @@
=
link_to
'Edit'
,
edit_admin_user_path
(
@admin_user
),
:class
=>
"btn small right"
%
h
r
%
b
r
...
...
@@ -6,5 +10,5 @@
%table
.zebra-striped
%table
.zebra-striped
.table-bordered
%tr
%td
%b
...
...
@@ -49,6 +53,4 @@
%td
=
@admin_user
.
twitter
%h3
Projects
%hr
...
...
@@ -54,19 +56,5 @@
%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
...
...
@@ -72,6 +60,6 @@
=
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:
...
...
@@ -74,10 +62,9 @@
%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"
...
...
@@ -79,8 +66,16 @@
%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
...
...
@@ -86,4 +81,19 @@
%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
{
...
...
app/views/help/index.html.haml
View file @
f72629a5
%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.
...
...
app/views/layouts/admin.html.haml
View file @
f72629a5
...
...
@@ -7,4 +7,5 @@
.container
%nav
.main_menu
=
render
"layouts/const_menu_links"
=
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
...
...
@@ -10,5 +11,4 @@
=
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
"Emails"
,
admin_emails_path
,
:class
=>
controller
.
controller_name
==
"mailer"
?
"current"
:
nil
=
link_to
"Resque"
,
"/info/resque"
...
...
config/routes.rb
View file @
f72629a5
...
...
@@ -14,6 +14,8 @@
resources
:users
do
member
do
put
:team_update
put
:block
put
:unblock
end
end
resources
:projects
,
:constraints
=>
{
:id
=>
/[^\/]+/
}
do
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment