From f720a1190f203c00ba14f45ee2cce79726ecdba0 Mon Sep 17 00:00:00 2001 From: Ruben Davila Date: Fri, 24 Mar 2017 16:33:38 -0500 Subject: [PATCH 1/3] Add new class to help with the check of enabled features --- app/models/enabled_features.rb | 39 ++++++++++++++++++++++++++++++++++ app/models/license.rb | 8 +++++++ 2 files changed, 47 insertions(+) create mode 100644 app/models/enabled_features.rb diff --git a/app/models/enabled_features.rb b/app/models/enabled_features.rb new file mode 100644 index 00000000000000..862f7e358f23eb --- /dev/null +++ b/app/models/enabled_features.rb @@ -0,0 +1,39 @@ +class EnabledFeatures + FILE_LOCK = 'GitLab_FileLocks' + GEO = 'GitLab_Geo' + ADD_ONS = [FILE_LOCK, GEO] + + DEPLOY_BOARDS = 'deploy_boards' + PREMIUM_FEATURES = [DEPLOY_BOARDS] + + def self.allow?(name) + new.allow?(name) + end + + def allow?(name) + case name + when *ADD_ONS + check_add_on(name) + when *PREMIUM_FEATURES + premium_plan? + end + end + + private + + def premium_plan? + current_license&.plan?('premium') + end + + def current_license + @license ||= License.current + end + + def check_add_on(name) + if premium_plan? + current_license&.excluded_add_ons.exclude?(name) + else + current_license.add_on?(name) + end + end +end diff --git a/app/models/license.rb b/app/models/license.rb index 91506780adb483..0bc87dacdd91b1 100644 --- a/app/models/license.rb +++ b/app/models/license.rb @@ -91,6 +91,14 @@ def add_on?(code) add_ons[code].to_i > 0 end + def excluded_add_ons + restricted_attr(:excluded_add_ons, {}) + end + + def plan?(name) + restricted_attr(:plan) == name + end + def restricted_user_count restricted_attr(:active_user_count) end -- GitLab From ee9d4769ffbcd8ffbda99ef23a8385c559a2fc41 Mon Sep 17 00:00:00 2001 From: Filipa Lacerda Date: Mon, 27 Mar 2017 15:42:36 +0100 Subject: [PATCH 2/3] Adds verification for deploy boards feature --- .../environments/components/environment.js | 9 ++++++++- .../environments/components/environments_table.js | 15 ++++++++++++++- app/views/projects/environments/index.html.haml | 3 ++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/environments/components/environment.js b/app/assets/javascripts/environments/components/environment.js index c07f90add73eff..127ce5d2c294b3 100644 --- a/app/assets/javascripts/environments/components/environment.js +++ b/app/assets/javascripts/environments/components/environment.js @@ -34,6 +34,7 @@ export default Vue.component('environment-component', { projectStoppedEnvironmentsPath: environmentsData.projectStoppedEnvironmentsPath, newEnvironmentPath: environmentsData.newEnvironmentPath, helpPagePath: environmentsData.helpPagePath, + canRenderDeployBoard: environmentsData.allowDeployBoards, // Pagination Properties, paginationInformation: {}, @@ -58,6 +59,10 @@ export default Vue.component('environment-component', { return gl.utils.convertPermissionToBoolean(this.canCreateEnvironment); }, + canRenderDeployBoardParsed() { + return gl.utils.convertPermissionToBoolean(this.canRenderDeployBoard); + }, + /** * Pagination should only be rendered when we have information about it and when the * number of total pages is bigger than 1. @@ -199,7 +204,9 @@ export default Vue.component('environment-component', { :can-read-environment="canReadEnvironmentParsed" :toggleDeployBoard="toggleDeployBoard" :store="store" - :service="service"/> + :service="service" + :can-render-deploy-board="canRenderDeployBoardParsed" + /> ({}), }, + + canRenderDeployBoard: { + type: Boolean, + required: true, + }, + }, + + computed: { + shouldRenderDeployBoard() { + return this.canRenderDeployBoard && + this.model.hasDeployBoard && + this.model.isDeployBoardVisible; + }, }, template: ` @@ -74,7 +87,7 @@ export default { :toggleDeployBoard="toggleDeployBoard" :service="service"> - + project_environments_path(@project, scope: :stopped), "new-environment-path" => new_namespace_project_environment_path(@project.namespace, @project), "help-page-path" => help_page_path("ci/environments"), - "css-class" => container_class } } + "css-class" => container_class, + "allow_deploy_boards" => true } } -- GitLab From b7baa7309949868007dbee96bc87de4310ec6aa8 Mon Sep 17 00:00:00 2001 From: Filipa Lacerda Date: Mon, 27 Mar 2017 16:06:34 +0100 Subject: [PATCH 3/3] Update with correct data --- .../javascripts/environments/components/environment.js | 8 ++++---- .../environments/components/environments_table.js | 3 +-- app/views/projects/environments/index.html.haml | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/environments/components/environment.js b/app/assets/javascripts/environments/components/environment.js index 127ce5d2c294b3..b2f4c91fd05acd 100644 --- a/app/assets/javascripts/environments/components/environment.js +++ b/app/assets/javascripts/environments/components/environment.js @@ -34,7 +34,7 @@ export default Vue.component('environment-component', { projectStoppedEnvironmentsPath: environmentsData.projectStoppedEnvironmentsPath, newEnvironmentPath: environmentsData.newEnvironmentPath, helpPagePath: environmentsData.helpPagePath, - canRenderDeployBoard: environmentsData.allowDeployBoards, + canUseDeployBoard: environmentsData.canUseDeployBoards, // Pagination Properties, paginationInformation: {}, @@ -59,8 +59,8 @@ export default Vue.component('environment-component', { return gl.utils.convertPermissionToBoolean(this.canCreateEnvironment); }, - canRenderDeployBoardParsed() { - return gl.utils.convertPermissionToBoolean(this.canRenderDeployBoard); + canRenderDeployBoard() { + return gl.utils.convertPermissionToBoolean(this.canUseDeployBoard); }, /** @@ -205,7 +205,7 @@ export default Vue.component('environment-component', { :toggleDeployBoard="toggleDeployBoard" :store="store" :service="service" - :can-render-deploy-board="canRenderDeployBoardParsed" + :can-render-deploy-board="canRenderDeployBoard" /> diff --git a/app/assets/javascripts/environments/components/environments_table.js b/app/assets/javascripts/environments/components/environments_table.js index e6904147a7e793..792be8975f9be1 100644 --- a/app/assets/javascripts/environments/components/environments_table.js +++ b/app/assets/javascripts/environments/components/environments_table.js @@ -94,8 +94,7 @@ export default { :service="service" :environmentID="model.id" :deployBoardData="model.deployBoardData" - :endpoint="model.rollout_status_path"> - + :endpoint="model.rollout_status_path" /> diff --git a/app/views/projects/environments/index.html.haml b/app/views/projects/environments/index.html.haml index b5162f996365f3..45801edf141e8c 100644 --- a/app/views/projects/environments/index.html.haml +++ b/app/views/projects/environments/index.html.haml @@ -15,4 +15,4 @@ "new-environment-path" => new_namespace_project_environment_path(@project.namespace, @project), "help-page-path" => help_page_path("ci/environments"), "css-class" => container_class, - "allow_deploy_boards" => true } } + "can-use-deploy-boards" => EnabledFeatures.allow?(EnabledFeatures::DEPLOY_BOARDS).to_s } } -- GitLab