diff --git a/ee/app/controllers/groups/analytics/cycle_analytics_controller.rb b/ee/app/controllers/groups/analytics/cycle_analytics_controller.rb
index f16da514bdb8cce8afa728b1633b962cf471c5cd..a03c8612797e5a2ea22706cdfaf2bcf34864e431 100644
--- a/ee/app/controllers/groups/analytics/cycle_analytics_controller.rb
+++ b/ee/app/controllers/groups/analytics/cycle_analytics_controller.rb
@@ -1,32 +1,9 @@
 # frozen_string_literal: true
 
-class Groups::Analytics::CycleAnalyticsController < Groups::Analytics::ApplicationController
-  include CycleAnalyticsParams
-
+class Groups::Analytics::CycleAnalyticsController < Analytics::CycleAnalyticsController
   layout 'group'
 
-  check_feature_flag Gitlab::Analytics::CYCLE_ANALYTICS_FEATURE_FLAG
-  increment_usage_counter Gitlab::UsageDataCounters::CycleAnalyticsCounter, :views, only: :show
-
   before_action do
-    push_frontend_feature_flag(:cycle_analytics_scatterplot_enabled, default_enabled: true)
-    push_frontend_feature_flag(:cycle_analytics_scatterplot_median_enabled, default_enabled: true)
-    push_frontend_feature_flag(:value_stream_analytics_path_navigation, @group)
-  end
-
-  before_action :load_group, only: :show
-  before_action :load_project, only: :show
-  before_action :build_request_params, only: :show
-
-  def build_request_params
-    @request_params ||= Gitlab::Analytics::CycleAnalytics::RequestParams.new(allowed_params.merge(group: @group), current_user: current_user)
-  end
-
-  def allowed_params
-    params.permit(
-      :created_after,
-      :created_before,
-      project_ids: []
-    )
+    render_403 unless can?(current_user, :read_group_cycle_analytics, @group)
   end
 end
diff --git a/ee/spec/controllers/groups/analytics/cycle_analytics_controller_spec.rb b/ee/spec/controllers/groups/analytics/cycle_analytics_controller_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..03ed7329fad88a9a88af5a99c77a22a5244550f3
--- /dev/null
+++ b/ee/spec/controllers/groups/analytics/cycle_analytics_controller_spec.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Groups::Analytics::CycleAnalyticsController do
+  let(:group) { create(:group) }
+  let(:user) { create(:user) }
+
+  before do
+    group.add_maintainer(user)
+    sign_in(user)
+  end
+
+  context 'when the license is available' do
+    before do
+      stub_licensed_features(cycle_analytics_for_groups: true)
+    end
+
+    it 'succeeds' do
+      get(:show, params: { group_id: group })
+
+      expect(response).to be_successful
+    end
+  end
+
+  context 'when the license is missing' do
+    it 'renders 403 error' do
+      get(:show, params: { group_id: group })
+
+      expect(response).to have_gitlab_http_status(:forbidden)
+    end
+  end
+
+  context 'when non-existent group is given' do
+    it 'renders 403 error' do
+      get(:show, params: { group_id: 'unknown' })
+
+      expect(response).to have_gitlab_http_status(:not_found)
+    end
+  end
+end