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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
  .form-actions
 | 
			
		||||
    = 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"
 | 
			
		||||
    = 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 New Issue