Commit e6002bda authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Ability to manage and remove group as owner outside of admin area

parent 591e094e
...@@ -6,6 +6,7 @@ class GroupsController < ApplicationController ...@@ -6,6 +6,7 @@ class GroupsController < ApplicationController
# Authorize # Authorize
before_filter :authorize_read_group!, except: [:new, :create] before_filter :authorize_read_group!, except: [:new, :create]
before_filter :authorize_admin_group!, only: [:edit, :update, :destroy]
before_filter :authorize_create_group!, only: [:new, :create] before_filter :authorize_create_group!, only: [:new, :create]
# Load group projects # Load group projects
...@@ -84,6 +85,31 @@ class GroupsController < ApplicationController ...@@ -84,6 +85,31 @@ class GroupsController < ApplicationController
redirect_to people_group_path(@group), notice: 'Users was successfully added.' redirect_to people_group_path(@group), notice: 'Users was successfully added.'
end end
def edit
end
def update
group_params = params[:group].dup
owner_id =group_params.delete(:owner_id)
if owner_id
@group.owner = User.find(owner_id)
end
if @group.update_attributes(group_params)
redirect_to @group, notice: 'Group was successfully updated.'
else
render action: "edit"
end
end
def destroy
@group.truncate_teams
@group.destroy
redirect_to root_path, notice: 'Group was removed.'
end
protected protected
def group def group
...@@ -106,6 +132,14 @@ class GroupsController < ApplicationController ...@@ -106,6 +132,14 @@ class GroupsController < ApplicationController
end end
def authorize_create_group! def authorize_create_group!
can?(current_user, :create_group, nil) unless can?(current_user, :create_group, nil)
return render_404
end
end
def authorize_admin_group!
unless can?(current_user, :manage_group, group)
return render_404
end
end end
end end
%h3.page_title Edit Group
%hr
= form_for @group do |f|
- if @group.errors.any?
.alert.alert-error
%span= @group.errors.full_messages.first
.clearfix
= f.label :name do
Group name is
.input
= f.text_field :name, placeholder: "Ex. OpenSource", class: "xxlarge left"
&nbsp;
= f.submit 'Save group', class: "btn btn-save"
%hr
.row
.span7
.ui-box
%h5.title Projects
%ul.well-list
- @group.projects.each do |project|
%li
- if project.public
%i.icon-share
- else
%i.icon-lock.cgreen
= link_to project.name_with_namespace, project
.pull-right
= link_to 'Team', project_team_index_path(project), id: "edit_#{dom_id(project)}", class: "btn btn-small"
= link_to 'Edit', edit_project_path(project), id: "edit_#{dom_id(project)}", class: "btn btn-small"
= link_to 'Remove', project, confirm: "REMOVE #{project.name}? Are you sure?", method: :delete, class: "btn btn-small btn-remove"
.span5
.ui-box
%h5.title Transfer group
.padded
%p
Transferring group will cause loss of admin control over group and all child projects
= form_for @group do |f|
= f.select :owner_id, User.all.map { |user| [user.name, user.id] }, {}, {class: 'chosen'}
= f.submit 'Transfer group', class: "btn btn-small"
.ui-box
%h5.title Remove group
.padded.bgred
%p
Remove of group will cause removing all child projects and resources
%br
Removed group can not be restored!
= link_to 'Remove Group', @group, confirm: 'Removed group can not be restored! Are you sure?', method: :delete, class: "btn btn-remove btn-small"
...@@ -22,4 +22,10 @@ ...@@ -22,4 +22,10 @@
= nav_link(path: 'groups#people') do = nav_link(path: 'groups#people') do
= link_to "People", people_group_path(@group) = link_to "People", people_group_path(@group)
- if can?(current_user, :manage_group, @group)
= nav_link(path: 'groups#edit') do
= link_to edit_group_path(@group), class: "tab " do
%i.icon-edit
Edit Group
.content= yield .content= yield
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
= f.check_box :wiki_enabled = f.check_box :wiki_enabled
%span.descr Pages for project documentation %span.descr Pages for project documentation
- if can? current_user, :change_public_mode, @project - if can?(current_user, :change_public_mode, @project)
%fieldset.features %fieldset.features
%legend %legend
%i.icon-share %i.icon-share
......
...@@ -15,8 +15,6 @@ ...@@ -15,8 +15,6 @@
Team path is Team path is
.input .input
= f.text_field :path, placeholder: "opensource", class: "xxlarge left" = f.text_field :path, placeholder: "opensource", class: "xxlarge left"
.clearfix .form-actions
.input.span3.center
= f.submit 'Save team changes', class: "btn btn-primary" = f.submit 'Save team changes', class: "btn btn-primary"
.input.span3.center = link_to 'Delete team', team_path(@team), method: :delete, confirm: "You are shure?", class: "btn btn-remove pull-right"
= link_to 'Delete team', team_path(@team), method: :delete, confirm: "You are shure?", class: "btn btn-remove"
...@@ -129,7 +129,7 @@ Gitlab::Application.routes.draw do ...@@ -129,7 +129,7 @@ Gitlab::Application.routes.draw do
# #
# Groups Area # Groups Area
# #
resources :groups, constraints: { id: /[^\/]+/ }, only: [:show, :new, :create] do resources :groups, constraints: { id: /[^\/]+/ } do
member do member do
get :issues get :issues
get :merge_requests get :merge_requests
......
...@@ -24,3 +24,9 @@ Feature: Groups ...@@ -24,3 +24,9 @@ Feature: Groups
When I visit group people page When I visit group people page
And I select user "John" from list with role "Reporter" And I select user "John" from list with role "Reporter"
Then I should see user "John" in team list Then I should see user "John" in team list
Scenario: I should see edit group page
When I visit group settings page
And I change group name
Then I should see new group name
...@@ -82,6 +82,17 @@ class Groups < Spinach::FeatureSteps ...@@ -82,6 +82,17 @@ class Groups < Spinach::FeatureSteps
current_path.should == group_path(Group.last) current_path.should == group_path(Group.last)
end end
And 'I change group name' do
fill_in 'group_name', :with => 'new-name'
click_button "Save group"
end
Then 'I should see new group name' do
within ".navbar-gitlab" do
page.should have_content "group: new-name"
end
end
protected protected
def current_group def current_group
......
...@@ -25,6 +25,10 @@ module SharedPaths ...@@ -25,6 +25,10 @@ module SharedPaths
visit people_group_path(current_group) visit people_group_path(current_group)
end end
When 'I visit group settings page' do
visit edit_group_path(current_group)
end
# ---------------------------------------- # ----------------------------------------
# Dashboard # Dashboard
# ---------------------------------------- # ----------------------------------------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment