Commit 93636753 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Use update build policy instead of new play policy

parent b6facd83
module Ci module Ci
class BuildPolicy < CommitStatusPolicy class BuildPolicy < CommitStatusPolicy
alias_method :build, :subject
def rules def rules
super super
...@@ -9,17 +11,17 @@ module Ci ...@@ -9,17 +11,17 @@ module Ci
cannot! :"#{rule}_commit_status" unless can? :"#{rule}_build" cannot! :"#{rule}_commit_status" unless can? :"#{rule}_build"
end end
can! :play_build if can_play_action? if can?(:update_build) && protected_action?
cannot! :update_build
end
end end
private private
alias_method :build, :subject def protected_action?
def can_play_action?
return false unless build.action? return false unless build.action?
::Gitlab::UserAccess !::Gitlab::UserAccess
.new(user, project: build.project) .new(user, project: build.project)
.can_push_to_branch?(build.ref) .can_push_to_branch?(build.ref)
end end
......
...@@ -12,6 +12,6 @@ class EnvironmentPolicy < BasePolicy ...@@ -12,6 +12,6 @@ class EnvironmentPolicy < BasePolicy
private private
def can_play_stop_action? def can_play_stop_action?
Ability.allowed?(user, :play_build, environment.stop_action) Ability.allowed?(user, :update_build, environment.stop_action)
end end
end end
...@@ -19,6 +19,6 @@ class BuildActionEntity < Grape::Entity ...@@ -19,6 +19,6 @@ class BuildActionEntity < Grape::Entity
alias_method :build, :object alias_method :build, :object
def playable? def playable?
build.playable? && can?(request.user, :play_build, build) build.playable? && can?(request.user, :update_build, build)
end end
end end
...@@ -26,7 +26,7 @@ class BuildEntity < Grape::Entity ...@@ -26,7 +26,7 @@ class BuildEntity < Grape::Entity
alias_method :build, :object alias_method :build, :object
def playable? def playable?
build.playable? && can?(request.user, :play_build, build) build.playable? && can?(request.user, :update_build, build)
end end
def detailed_status def detailed_status
......
module Ci module Ci
class PlayBuildService < ::BaseService class PlayBuildService < ::BaseService
def execute(build) def execute(build)
unless can?(current_user, :play_build, build) unless can?(current_user, :update_build, build)
raise Gitlab::Access::AccessDeniedError raise Gitlab::Access::AccessDeniedError
end end
......
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
= link_to cancel_namespace_project_build_path(job.project.namespace, job.project, job, return_to: request.original_url), method: :post, title: 'Cancel', class: 'btn btn-build' do = link_to cancel_namespace_project_build_path(job.project.namespace, job.project, job, return_to: request.original_url), method: :post, title: 'Cancel', class: 'btn btn-build' do
= icon('remove', class: 'cred') = icon('remove', class: 'cred')
- elsif allow_retry - elsif allow_retry
- if job.playable? && !admin && can?(current_user, :play_build, job) - if job.playable? && !admin && can?(current_user, :update_build, job)
= link_to play_namespace_project_build_path(job.project.namespace, job.project, job, return_to: request.original_url), method: :post, title: 'Play', class: 'btn btn-build' do = link_to play_namespace_project_build_path(job.project.namespace, job.project, job, return_to: request.original_url), method: :post, title: 'Play', class: 'btn btn-build' do
= custom_icon('icon_play') = custom_icon('icon_play')
- elsif job.retryable? - elsif job.retryable?
......
...@@ -14,7 +14,7 @@ module Gitlab ...@@ -14,7 +14,7 @@ module Gitlab
end end
def has_action? def has_action?
can?(user, :play_build, subject) can?(user, :update_build, subject)
end end
def action_icon def action_icon
......
...@@ -108,8 +108,8 @@ describe Ci::BuildPolicy, :models do ...@@ -108,8 +108,8 @@ describe Ci::BuildPolicy, :models do
create(:ci_build, :manual, ref: 'some-ref', pipeline: pipeline) create(:ci_build, :manual, ref: 'some-ref', pipeline: pipeline)
end end
it 'does not include ability to play build' do it 'does not include ability to update build' do
expect(policies).not_to include :play_build expect(policies).not_to include :update_build
end end
end end
...@@ -118,8 +118,8 @@ describe Ci::BuildPolicy, :models do ...@@ -118,8 +118,8 @@ describe Ci::BuildPolicy, :models do
create(:ci_build, ref: 'some-ref', pipeline: pipeline) create(:ci_build, ref: 'some-ref', pipeline: pipeline)
end end
it 'does not include ability to play build' do it 'includes ability to update build' do
expect(policies).not_to include :play_build expect(policies).to include :update_build
end end
end end
end end
...@@ -128,16 +128,16 @@ describe Ci::BuildPolicy, :models do ...@@ -128,16 +128,16 @@ describe Ci::BuildPolicy, :models do
context 'when build is a manual action' do context 'when build is a manual action' do
let(:build) { create(:ci_build, :manual, pipeline: pipeline) } let(:build) { create(:ci_build, :manual, pipeline: pipeline) }
it 'includes ability to play build' do it 'includes ability to update build' do
expect(policies).to include :play_build expect(policies).to include :update_build
end end
end end
context 'when build is not a manual action' do context 'when build is not a manual action' do
let(:build) { create(:ci_build, pipeline: pipeline) } let(:build) { create(:ci_build, pipeline: pipeline) }
it 'does not include ability to play build' do it 'includes ability to update build' do
expect(policies).not_to include :play_build expect(policies).to include :update_build
end end
end end
end end
......
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