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

4-2-stable
Dmitriy Zaporozhets 2013-02-01 19:04:11 +02:00
parent 591e094e06
commit e6002bdaff
9 changed files with 117 additions and 8 deletions

View File

@ -6,6 +6,7 @@ class GroupsController < ApplicationController
# Authorize
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]
# Load group projects
@ -84,6 +85,31 @@ class GroupsController < ApplicationController
redirect_to people_group_path(@group), notice: 'Users was successfully added.'
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
def group
@ -106,6 +132,14 @@ class GroupsController < ApplicationController
end
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

View File

@ -0,0 +1,50 @@
%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"

View File

@ -22,4 +22,10 @@
= nav_link(path: 'groups#people') do
= 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

View File

@ -42,7 +42,7 @@
= f.check_box :wiki_enabled
%span.descr Pages for project documentation
- if can? current_user, :change_public_mode, @project
- if can?(current_user, :change_public_mode, @project)
%fieldset.features
%legend
%i.icon-share

View File

@ -15,8 +15,6 @@
Team path is
.input
= f.text_field :path, placeholder: "opensource", class: "xxlarge left"
.clearfix
.input.span3.center
= 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"
.form-actions
= f.submit 'Save team changes', class: "btn btn-primary"
= link_to 'Delete team', team_path(@team), method: :delete, confirm: "You are shure?", class: "btn btn-remove pull-right"

View File

@ -129,7 +129,7 @@ Gitlab::Application.routes.draw do
#
# Groups Area
#
resources :groups, constraints: { id: /[^\/]+/ }, only: [:show, :new, :create] do
resources :groups, constraints: { id: /[^\/]+/ } do
member do
get :issues
get :merge_requests

View File

@ -24,3 +24,9 @@ Feature: Groups
When I visit group people page
And I select user "John" from list with role "Reporter"
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

View File

@ -82,6 +82,17 @@ class Groups < Spinach::FeatureSteps
current_path.should == group_path(Group.last)
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
def current_group

View File

@ -25,6 +25,10 @@ module SharedPaths
visit people_group_path(current_group)
end
When 'I visit group settings page' do
visit edit_group_path(current_group)
end
# ----------------------------------------
# Dashboard
# ----------------------------------------