Hide pipeline schedule 'take ownership' for current owner
This commit is contained in:
parent
5b73e0eb35
commit
391d1915c8
5 changed files with 76 additions and 1 deletions
|
@ -10,6 +10,10 @@ module Ci
|
||||||
can?(:developer_access) && pipeline_schedule.owned_by?(@user)
|
can?(:developer_access) && pipeline_schedule.owned_by?(@user)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
condition(:non_owner_of_schedule) do
|
||||||
|
!pipeline_schedule.owned_by?(@user)
|
||||||
|
end
|
||||||
|
|
||||||
rule { can?(:developer_access) }.policy do
|
rule { can?(:developer_access) }.policy do
|
||||||
enable :play_pipeline_schedule
|
enable :play_pipeline_schedule
|
||||||
end
|
end
|
||||||
|
@ -19,6 +23,10 @@ module Ci
|
||||||
enable :admin_pipeline_schedule
|
enable :admin_pipeline_schedule
|
||||||
end
|
end
|
||||||
|
|
||||||
|
rule { can?(:master_access) & non_owner_of_schedule }.policy do
|
||||||
|
enable :take_ownership_pipeline_schedule
|
||||||
|
end
|
||||||
|
|
||||||
rule { protected_ref }.prevent :play_pipeline_schedule
|
rule { protected_ref }.prevent :play_pipeline_schedule
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -29,9 +29,10 @@
|
||||||
- if can?(current_user, :play_pipeline_schedule, pipeline_schedule)
|
- if can?(current_user, :play_pipeline_schedule, pipeline_schedule)
|
||||||
= link_to play_pipeline_schedule_path(pipeline_schedule), method: :post, title: s_('Play'), class: 'btn' do
|
= link_to play_pipeline_schedule_path(pipeline_schedule), method: :post, title: s_('Play'), class: 'btn' do
|
||||||
= icon('play')
|
= icon('play')
|
||||||
- if can?(current_user, :update_pipeline_schedule, pipeline_schedule)
|
- if can?(current_user, :take_ownership_pipeline_schedule, pipeline_schedule)
|
||||||
= link_to take_ownership_pipeline_schedule_path(pipeline_schedule), method: :post, title: s_('PipelineSchedules|Take ownership'), class: 'btn' do
|
= link_to take_ownership_pipeline_schedule_path(pipeline_schedule), method: :post, title: s_('PipelineSchedules|Take ownership'), class: 'btn' do
|
||||||
= s_('PipelineSchedules|Take ownership')
|
= s_('PipelineSchedules|Take ownership')
|
||||||
|
- if can?(current_user, :update_pipeline_schedule, pipeline_schedule)
|
||||||
= link_to edit_pipeline_schedule_path(pipeline_schedule), title: _('Edit'), class: 'btn' do
|
= link_to edit_pipeline_schedule_path(pipeline_schedule), title: _('Edit'), class: 'btn' do
|
||||||
= icon('pencil')
|
= icon('pencil')
|
||||||
- if can?(current_user, :admin_pipeline_schedule, pipeline_schedule)
|
- if can?(current_user, :admin_pipeline_schedule, pipeline_schedule)
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Hide pipeline schedule take ownership for current owner
|
||||||
|
merge_request: 12986
|
||||||
|
author:
|
||||||
|
type: fixed
|
|
@ -88,5 +88,19 @@ describe Ci::PipelineSchedulePolicy, :models do
|
||||||
expect(policy).to be_allowed :admin_pipeline_schedule
|
expect(policy).to be_allowed :admin_pipeline_schedule
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'rules for non-owner of schedule' do
|
||||||
|
let(:owner) { create(:user) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
project.add_master(owner)
|
||||||
|
project.add_master(user)
|
||||||
|
pipeline_schedule.update(owner: owner)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'includes abilities to take ownership' do
|
||||||
|
expect(policy).to be_allowed :take_ownership_pipeline_schedule
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'projects/pipeline_schedules/_pipeline_schedule' do
|
||||||
|
let(:owner) { create(:user) }
|
||||||
|
let(:master) { create(:user) }
|
||||||
|
let(:project) { create(:project) }
|
||||||
|
let(:pipeline_schedule) { create(:ci_pipeline_schedule, :nightly, project: project) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
assign(:project, project)
|
||||||
|
|
||||||
|
allow(view).to receive(:current_user).and_return(user)
|
||||||
|
allow(view).to receive(:pipeline_schedule).and_return(pipeline_schedule)
|
||||||
|
|
||||||
|
allow(view).to receive(:can?).and_return(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'taking ownership of schedule' do
|
||||||
|
context 'when non-owner is signed in' do
|
||||||
|
let(:user) { master }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(view).to receive(:can?).with(master, :take_ownership_pipeline_schedule, pipeline_schedule).and_return(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'non-owner can take ownership of pipeline' do
|
||||||
|
render
|
||||||
|
|
||||||
|
expect(rendered).to have_link('Take ownership')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when owner is signed in' do
|
||||||
|
let(:user) { owner }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(view).to receive(:can?).with(owner, :take_ownership_pipeline_schedule, pipeline_schedule).and_return(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'owner cannot take ownership of pipeline' do
|
||||||
|
render
|
||||||
|
|
||||||
|
expect(rendered).not_to have_link('Take ownership')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue