diff --git a/lib/gitlab/ci/status/build/play.rb b/lib/gitlab/ci/status/build/play.rb
index 3495b8d0448b923d4f8b9592c47ebaffbe7e6ab7..29d0558a265c541a2a8e6e5c39e6bf0f45a86470 100644
--- a/lib/gitlab/ci/status/build/play.rb
+++ b/lib/gitlab/ci/status/build/play.rb
@@ -10,7 +10,7 @@ module Gitlab
           end
 
           def has_action?
-            can?(user, :update_build, subject)
+            can?(user, :update_build, subject) && subject.can_play?(user)
           end
 
           def action_icon
diff --git a/spec/lib/gitlab/ci/status/build/play_spec.rb b/spec/lib/gitlab/ci/status/build/play_spec.rb
index 6c97a4fe5cad435cd030937662c42c9041c71f71..48aeb89e11f4452e985efd93cce088c1c7125716 100644
--- a/spec/lib/gitlab/ci/status/build/play_spec.rb
+++ b/spec/lib/gitlab/ci/status/build/play_spec.rb
@@ -17,9 +17,17 @@ describe Gitlab::Ci::Status::Build::Play do
 
     describe '#has_action?' do
       context 'when user is allowed to update build' do
-        before { build.project.team << [user, :developer] }
+        context 'when user can push to branch' do
+          before { build.project.add_master(user) }
 
-        it { is_expected.to have_action }
+          it { is_expected.to have_action }
+        end
+
+        context 'when user can not push to the branch' do
+          before { build.project.add_developer(user) }
+
+          it { is_expected.not_to have_action }
+        end
       end
 
       context 'when user is not allowed to update build' do