Skip to content
Snippets Groups Projects
Commit 6b99848b authored by Shinya Maeda's avatar Shinya Maeda Committed by Filipa Lacerda
Browse files

Move permission check of manual actions of deployments

parent acb939d7
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