Skip to content
Snippets Groups Projects
Commit 051eec95 authored by Filipa Lacerda's avatar Filipa Lacerda
Browse files

Merge branch 'move-permission-check-manual-actions-on-deployments' into 'master'

Move permission check of manual actions of deployments

Closes #52412

See merge request gitlab-org/gitlab-ce!24660
parents acb939d7 6b99848b
No related branches found
No related tags found
No related merge requests found
Showing
with 48 additions and 50 deletions
Loading
Loading
@@ -22,10 +22,6 @@ export default {
type: Object,
required: true,
},
canCreateDeployment: {
type: Boolean,
required: true,
},
canReadEnvironment: {
type: Boolean,
required: true,
Loading
Loading
@@ -51,11 +47,7 @@ export default {
<slot name="emptyState"></slot>
 
<div v-if="!isLoading && environments.length > 0" class="table-holder">
<environment-table
:environments="environments"
:can-create-deployment="canCreateDeployment"
:can-read-environment="canReadEnvironment"
/>
<environment-table :environments="environments" :can-read-environment="canReadEnvironment" />
 
<table-pagination
v-if="pagination && pagination.totalPages > 1"
Loading
Loading
Loading
Loading
@@ -47,12 +47,6 @@ export default {
default: () => ({}),
},
 
canCreateDeployment: {
type: Boolean,
required: false,
default: false,
},
canReadEnvironment: {
type: Boolean,
required: false,
Loading
Loading
@@ -151,7 +145,7 @@ export default {
},
 
actions() {
if (!this.model || !this.model.last_deployment || !this.canCreateDeployment) {
if (!this.model || !this.model.last_deployment) {
return [];
}
 
Loading
Loading
@@ -561,7 +555,7 @@ export default {
/>
 
<rollback-component
v-if="canRetry && canCreateDeployment"
v-if="canRetry"
:is-last-deployment="isLastDeployment"
:retry-url="retryUrl"
/>
Loading
Loading
Loading
Loading
@@ -24,10 +24,6 @@ export default {
type: Boolean,
required: true,
},
canCreateDeployment: {
type: Boolean,
required: true,
},
canReadEnvironment: {
type: Boolean,
required: true,
Loading
Loading
@@ -106,7 +102,6 @@ export default {
:is-loading="isLoading"
:environments="state.environments"
:pagination="state.paginationInformation"
:can-create-deployment="canCreateDeployment"
:can-read-environment="canReadEnvironment"
@onChangePage="onChangePage"
>
Loading
Loading
Loading
Loading
@@ -23,12 +23,6 @@ export default {
required: false,
default: false,
},
canCreateDeployment: {
type: Boolean,
required: false,
default: false,
},
},
methods: {
folderUrl(model) {
Loading
Loading
@@ -64,7 +58,6 @@ export default {
is="environment-item"
:key="`environment-item-${i}`"
:model="model"
:can-create-deployment="canCreateDeployment"
:can-read-environment="canReadEnvironment"
/>
 
Loading
Loading
@@ -79,7 +72,6 @@ export default {
v-for="(children, index) in model.children"
:key="`env-item-${i}-${index}`"
:model="children"
:can-create-deployment="canCreateDeployment"
:can-read-environment="canReadEnvironment"
/>
 
Loading
Loading
Loading
Loading
@@ -18,7 +18,6 @@ export default () =>
endpoint: environmentsData.environmentsDataEndpoint,
folderName: environmentsData.environmentsDataFolderName,
cssContainerClass: environmentsData.cssClass,
canCreateDeployment: parseBoolean(environmentsData.environmentsDataCanCreateDeployment),
canReadEnvironment: parseBoolean(environmentsData.environmentsDataCanReadEnvironment),
};
},
Loading
Loading
@@ -28,7 +27,6 @@ export default () =>
endpoint: this.endpoint,
folderName: this.folderName,
cssContainerClass: this.cssContainerClass,
canCreateDeployment: this.canCreateDeployment,
canReadEnvironment: this.canReadEnvironment,
},
});
Loading
Loading
Loading
Loading
@@ -23,10 +23,6 @@ export default {
type: String,
required: true,
},
canCreateDeployment: {
type: Boolean,
required: true,
},
canReadEnvironment: {
type: Boolean,
required: true,
Loading
Loading
@@ -55,7 +51,6 @@ export default {
:is-loading="isLoading"
:environments="state.environments"
:pagination="state.paginationInformation"
:can-create-deployment="canCreateDeployment"
:can-read-environment="canReadEnvironment"
@onChangePage="onChangePage"
/>
Loading
Loading
Loading
Loading
@@ -20,7 +20,6 @@ export default () =>
helpPagePath: environmentsData.helpPagePath,
cssContainerClass: environmentsData.cssClass,
canCreateEnvironment: parseBoolean(environmentsData.canCreateEnvironment),
canCreateDeployment: parseBoolean(environmentsData.canCreateDeployment),
canReadEnvironment: parseBoolean(environmentsData.canReadEnvironment),
};
},
Loading
Loading
@@ -32,7 +31,6 @@ export default () =>
helpPagePath: this.helpPagePath,
cssContainerClass: this.cssContainerClass,
canCreateEnvironment: this.canCreateEnvironment,
canCreateDeployment: this.canCreateDeployment,
canReadEnvironment: this.canReadEnvironment,
},
});
Loading
Loading
Loading
Loading
@@ -11,7 +11,6 @@ module EnvironmentsHelper
{
"endpoint" => folder_project_environments_path(@project, @folder, format: :json),
"folder-name" => @folder,
"can-create-deployment" => can?(current_user, :create_deployment, @project).to_s,
"can-read-environment" => can?(current_user, :read_environment, @project).to_s
}
end
Loading
Loading
Loading
Loading
@@ -24,6 +24,12 @@ class DeploymentEntity < Grape::Entity
expose :user, using: UserEntity
expose :commit, using: CommitEntity
expose :deployable, using: JobEntity
expose :manual_actions, using: JobEntity
expose :scheduled_actions, using: JobEntity
expose :manual_actions, using: JobEntity, if: -> (*) { can_create_deployment? }
expose :scheduled_actions, using: JobEntity, if: -> (*) { can_create_deployment? }
private
def can_create_deployment?
can?(request.current_user, :create_deployment, request.project)
end
end
Loading
Loading
@@ -2,7 +2,6 @@
- page_title _("Environments")
 
#environments-list-view{ data: { environments_data: environments_list_data,
"can-create-deployment" => can?(current_user, :create_deployment, @project).to_s,
"can-read-environment" => can?(current_user, :read_environment, @project).to_s,
"can-create-environment" => can?(current_user, :create_environment, @project).to_s,
"new-environment-path" => new_project_environment_path(@project),
Loading
Loading
---
title: Move permission check of manual actions of deployments
merge_request: 24660
author:
type: other
Loading
Loading
@@ -25,7 +25,6 @@ describe('Environment item', () => {
component = new EnvironmentItem({
propsData: {
model: mockItem,
canCreateDeployment: false,
canReadEnvironment: true,
service: {},
},
Loading
Loading
@@ -117,7 +116,6 @@ describe('Environment item', () => {
component = new EnvironmentItem({
propsData: {
model: environment,
canCreateDeployment: true,
canReadEnvironment: true,
service: {},
},
Loading
Loading
Loading
Loading
@@ -26,7 +26,6 @@ describe('Environment table', () => {
 
vm = mountComponent(Component, {
environments: [mockItem],
canCreateDeployment: false,
canReadEnvironment: true,
});
 
Loading
Loading
Loading
Loading
@@ -9,7 +9,6 @@ describe('Environment', () => {
const mockData = {
endpoint: 'environments.json',
canCreateEnvironment: true,
canCreateDeployment: true,
canReadEnvironment: true,
cssContainerClass: 'container',
newEnvironmentPath: 'environments/new',
Loading
Loading
Loading
Loading
@@ -13,7 +13,6 @@ describe('Environments Folder View', () => {
const mockData = {
endpoint: 'environments.json',
folderName: 'review',
canCreateDeployment: true,
canReadEnvironment: true,
cssContainerClass: 'container',
};
Loading
Loading
require 'spec_helper'
 
describe DeploymentEntity do
let(:user) { create(:user) }
let(:user) { developer }
let(:developer) { create(:user) }
let(:reporter) { create(:user) }
let(:project) { create(:project) }
let(:request) { double('request') }
let(:deployment) { create(:deployment) }
let(:deployment) { create(:deployment, deployable: build, project: project) }
let(:build) { create(:ci_build, :manual, pipeline: pipeline) }
let(:pipeline) { create(:ci_pipeline, project: project, user: user) }
let(:entity) { described_class.new(deployment, request: request) }
subject { entity.as_json }
 
before do
project.add_developer(developer)
project.add_reporter(reporter)
allow(request).to receive(:current_user).and_return(user)
allow(request).to receive(:project).and_return(project)
end
 
it 'exposes internal deployment id' do
Loading
Loading
@@ -23,6 +31,24 @@ describe DeploymentEntity do
expect(subject).to include(:created_at)
end
 
context 'when the pipeline has another manual action' do
let(:other_build) { create(:ci_build, :manual, name: 'another deploy', pipeline: pipeline) }
let!(:other_deployment) { create(:deployment, deployable: other_build) }
it 'returns another manual action' do
expect(subject[:manual_actions].count).to eq(1)
expect(subject[:manual_actions].first[:name]).to eq('another deploy')
end
context 'when user is a reporter' do
let(:user) { reporter }
it 'returns another manual action' do
expect(subject[:manual_actions]).not_to be_present
end
end
end
describe 'scheduled_actions' do
let(:project) { create(:project, :repository) }
let(:pipeline) { create(:ci_pipeline, project: project, user: user) }
Loading
Loading
Loading
Loading
@@ -10,6 +10,10 @@ describe EnvironmentSerializer do
.represent(resource)
end
 
before do
project.add_developer(user)
end
context 'when there is a single object provided' do
let(:project) { create(:project, :repository) }
let(:deployable) { create(:ci_build) }
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment