diff options
author | Thong Kuah <tkuah@gitlab.com> | 2018-11-01 13:39:01 +1300 |
---|---|---|
committer | Thong Kuah <tkuah@gitlab.com> | 2018-11-01 19:37:33 +1300 |
commit | 1a1fdf8efe1923ba781e978e858c009264020e72 (patch) | |
tree | df98af221d7a722e4c67db450b78a5488bff6a3c /app/controllers | |
parent | 28dabc67f4db8271ac20c0db458ae2c86a906eee (diff) | |
download | gitlab-ce-1a1fdf8efe1923ba781e978e858c009264020e72.tar.gz |
Resolve controller sharing concern
Use ClustersController as base while having Projects::ClustersController
to inform what `clusterable` is. Thanks @ayufan for the great suggestion
!
- View changes to work with new approach
- Fix javascript for new approach
- Fix feature specs for new approach
- Fix QA
Diffstat (limited to 'app/controllers')
-rw-r--r-- | app/controllers/clusters/base_controller.rb | 32 | ||||
-rw-r--r-- | app/controllers/clusters/clusters_controller.rb (renamed from app/controllers/clusters_controller.rb) | 22 | ||||
-rw-r--r-- | app/controllers/projects/clusters/applications_controller.rb | 17 | ||||
-rw-r--r-- | app/controllers/projects/clusters_controller.rb | 24 |
4 files changed, 55 insertions, 40 deletions
diff --git a/app/controllers/clusters/base_controller.rb b/app/controllers/clusters/base_controller.rb index 3a8575769c4..ef42f7c4074 100644 --- a/app/controllers/clusters/base_controller.rb +++ b/app/controllers/clusters/base_controller.rb @@ -2,31 +2,25 @@ class Clusters::BaseController < ApplicationController include RoutableActions - include ProjectUnauthorized skip_before_action :authenticate_user! - before_action :require_project_id - before_action :project, if: :project_type? - before_action :repository, if: :project_type? before_action :authorize_read_cluster! - layout :determine_layout - helper_method :clusterable private - # We can extend to `#group_type?` in the future - def require_project_id - not_found unless project_type? + def cluster + @cluster ||= clusterable.clusters.find(params[:id]) + .present(current_user: current_user) end - def project - @project ||= find_routable!(Project, File.join(params[:namespace_id], params[:project_id]), not_found_or_authorized_proc: project_unauthorized_proc) + def authorize_update_cluster! + access_denied! unless can?(current_user, :update_cluster, cluster) end - def repository - @repository ||= project.repository + def authorize_admin_cluster! + access_denied! unless can?(current_user, :admin_cluster, cluster) end def authorize_read_cluster! @@ -37,17 +31,7 @@ class Clusters::BaseController < ApplicationController access_denied! unless can?(current_user, :create_cluster, clusterable) end - def determine_layout - if project_type? - 'project' - end - end - def clusterable - @clusterable ||= ClusterablePresenter.fabricate(project, current_user: current_user) - end - - def project_type? - params[:project_id].present? + raise NotImplementedError end end diff --git a/app/controllers/clusters_controller.rb b/app/controllers/clusters/clusters_controller.rb index 7aad70870ba..f6f2060ebb5 100644 --- a/app/controllers/clusters_controller.rb +++ b/app/controllers/clusters/clusters_controller.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true -class ClustersController < Clusters::BaseController +class Clusters::ClustersController < Clusters::BaseController + include RoutableActions + before_action :cluster, except: [:index, :new, :create_gcp, :create_user] before_action :generate_gcp_authorize_url, only: [:new] before_action :validate_gcp_token, only: [:new] @@ -9,7 +11,7 @@ class ClustersController < Clusters::BaseController before_action :authorize_create_cluster!, only: [:new] before_action :authorize_update_cluster!, only: [:update] before_action :authorize_admin_cluster!, only: [:destroy] - before_action :update_applications_status, only: [:status] + before_action :update_applications_status, only: [:cluster_status] helper_method :token_in_session @@ -23,7 +25,8 @@ class ClustersController < Clusters::BaseController def new end - def status + # Overridding ActionController::Metal#status is NOT a good idea + def cluster_status respond_to do |format| format.json do Gitlab::PollingInterval.set_header(response, interval: STATUS_POLLING_INTERVAL) @@ -107,11 +110,6 @@ class ClustersController < Clusters::BaseController private - def cluster - @cluster ||= clusterable.clusters.find(params[:id]) - .present(current_user: current_user) - end - def update_params if cluster.managed? params.require(:cluster).permit( @@ -214,14 +212,6 @@ class ClustersController < Clusters::BaseController end end - def authorize_update_cluster! - access_denied! unless can?(current_user, :update_cluster, cluster) - end - - def authorize_admin_cluster! - access_denied! unless can?(current_user, :admin_cluster, cluster) - end - def update_applications_status @cluster.applications.each(&:schedule_status_update) end diff --git a/app/controllers/projects/clusters/applications_controller.rb b/app/controllers/projects/clusters/applications_controller.rb new file mode 100644 index 00000000000..c7b6218d007 --- /dev/null +++ b/app/controllers/projects/clusters/applications_controller.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class Projects::Clusters::ApplicationsController < Clusters::ApplicationsController + include ProjectUnauthorized + + prepend_before_action :project + + private + + def clusterable + @clusterable ||= ClusterablePresenter.fabricate(project, current_user: current_user) + end + + def project + @project ||= find_routable!(Project, File.join(params[:namespace_id], params[:project_id]), not_found_or_authorized_proc: project_unauthorized_proc) + end +end diff --git a/app/controllers/projects/clusters_controller.rb b/app/controllers/projects/clusters_controller.rb new file mode 100644 index 00000000000..feda6deeaa6 --- /dev/null +++ b/app/controllers/projects/clusters_controller.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +class Projects::ClustersController < Clusters::ClustersController + include ProjectUnauthorized + + prepend_before_action :project + before_action :repository + + layout 'project' + + private + + def clusterable + @clusterable ||= ClusterablePresenter.fabricate(project, current_user: current_user) + end + + def project + @project ||= find_routable!(Project, File.join(params[:namespace_id], params[:project_id]), not_found_or_authorized_proc: project_unauthorized_proc) + end + + def repository + @repository ||= project.repository + end +end |