diff --git a/app/controllers/dashboard/labels_controller.rb b/app/controllers/dashboard/labels_controller.rb
index dd1d46a68c71cbc6c5957afa7acc469f3872a61f..9dcb3a0eb6d2f86a0cacccf9ed4fb3acf9824985 100644
--- a/app/controllers/dashboard/labels_controller.rb
+++ b/app/controllers/dashboard/labels_controller.rb
@@ -1,9 +1,14 @@
 class Dashboard::LabelsController < Dashboard::ApplicationController
   def index
-    labels = LabelsFinder.new(current_user).execute
-
     respond_to do |format|
       format.json { render json: LabelSerializer.new.represent_appearance(labels) }
     end
   end
+
+  def labels
+    finder_params = { project_ids: projects.select(:id) }
+    labels = LabelsFinder.new(current_user, finder_params).execute
+
+    GlobalLabel.build_collection(labels)
+  end
 end
diff --git a/app/models/global_label.rb b/app/models/global_label.rb
index 698a7bbd32772f39e883e3c98b2ee03948b871d3..2a1b7564962e4e4fb9b28fb61e72fddfb029356f 100644
--- a/app/models/global_label.rb
+++ b/app/models/global_label.rb
@@ -2,7 +2,7 @@ class GlobalLabel
   attr_accessor :title, :labels
   alias_attribute :name, :title
 
-  delegate :color, :description, to: :@first_label
+  delegate :color, :text_color, :description, to: :@first_label
 
   def for_display
     @first_label
diff --git a/app/serializers/label_entity.rb b/app/serializers/label_entity.rb
index ad565654342bacf388b10ae0b2fa801b291e614c..4452161051e4c44955c8f13f76e71c1861d8f03b 100644
--- a/app/serializers/label_entity.rb
+++ b/app/serializers/label_entity.rb
@@ -1,5 +1,6 @@
 class LabelEntity < Grape::Entity
-  expose :id
+  expose :id, if: ->(label, _) { !label.is_a?(GlobalLabel) }
+
   expose :title
   expose :color
   expose :description
diff --git a/changelogs/unreleased/34590-fix-dashboard-labels-dropdown.yml b/changelogs/unreleased/34590-fix-dashboard-labels-dropdown.yml
new file mode 100644
index 0000000000000000000000000000000000000000..11c01d28dc2bfb6dd411c7a6071658c2de046ac7
--- /dev/null
+++ b/changelogs/unreleased/34590-fix-dashboard-labels-dropdown.yml
@@ -0,0 +1,4 @@
+---
+title: Fix dashboard labels dropdown
+merge_request: 12708
+author:
diff --git a/spec/controllers/dashboard/labels_controller_spec.rb b/spec/controllers/dashboard/labels_controller_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..2b63933008f0c4d54739932c7537d4421a818a2b
--- /dev/null
+++ b/spec/controllers/dashboard/labels_controller_spec.rb
@@ -0,0 +1,25 @@
+require 'spec_helper'
+
+describe Dashboard::LabelsController do
+  let(:project) { create(:empty_project) }
+  let(:user)    { create(:user) }
+  let!(:label)  { create(:label, project: project) }
+
+  before do
+    sign_in(user)
+    project.add_reporter(user)
+  end
+
+  describe "#index" do
+    let!(:unrelated_label) { create(:label, project: create(:empty_project, :public)) }
+
+    it 'returns global labels for projects the user has a relationship with' do
+      get :index, format: :json
+
+      expect(json_response).to be_kind_of(Array)
+      expect(json_response.size).to eq(1)
+      expect(json_response[0]["id"]).to be_nil
+      expect(json_response[0]["title"]).to eq(label.title)
+    end
+  end
+end