Ability to manage and remove group as owner outside of admin area
This commit is contained in:
parent
591e094e06
commit
e6002bdaff
|
@ -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
|
||||
|
|
50
app/views/groups/edit.html.haml
Normal file
50
app/views/groups/edit.html.haml
Normal 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"
|
||||
|
||||
= 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 @@
|
|||
= 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
# ----------------------------------------
|
||||
|
|
Loading…
Reference in a new issue