diff --git a/app/helpers/namespaces_helper.rb b/app/helpers/namespaces_helper.rb
index 2e3a15bc1b9ccbe97b73e09753c40c2a6408e2f5..7f656b8caae1e44195a0c126b5f232e7100230a0 100644
--- a/app/helpers/namespaces_helper.rb
+++ b/app/helpers/namespaces_helper.rb
@@ -6,7 +6,13 @@ def namespace_id_from(params)
   def namespaces_options(selected = :current_user, display_path: false, extra_group: nil)
     groups = current_user.owned_groups + current_user.masters_groups
 
-    groups << extra_group if extra_group && !Group.exists?(name: extra_group.name)
+    unless extra_group.nil? || extra_group.is_a?(Group)
+      extra_group = Group.find(extra_group) if Namespace.find(extra_group).kind == 'group'
+    end
+
+    if extra_group && extra_group.is_a?(Group) && (!Group.exists?(name: extra_group.name) || Ability.allowed?(current_user, :read_group, extra_group))
+      groups |= [extra_group]
+    end
 
     users = [current_user.namespace]
 
diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml
index d129da943f8519c0f49267541b553ba732d7e566..34a1214a3504714baa4aa790a12c608cf5253d65 100644
--- a/app/views/projects/new.html.haml
+++ b/app/views/projects/new.html.haml
@@ -23,7 +23,7 @@
                 - if current_user.can_select_namespace?
                   .input-group-addon
                     = root_url
-                  = f.select :namespace_id, namespaces_options(namespace_id_from(params) || :current_user, display_path: true), {}, {class: 'select2 js-select-namespace', tabindex: 1}
+                  = f.select :namespace_id, namespaces_options(namespace_id_from(params) || :current_user, display_path: true, extra_group: namespace_id_from(params)), {}, { class: 'select2 js-select-namespace', tabindex: 1}
 
                 - else
                   .input-group-addon.static-namespace
diff --git a/changelogs/unreleased/27910-admin-can-create-project-in-all-groups.yml b/changelogs/unreleased/27910-admin-can-create-project-in-all-groups.yml
new file mode 100644
index 0000000000000000000000000000000000000000..40fd8dacc8281a4a99b734b248948f4d47577a9c
--- /dev/null
+++ b/changelogs/unreleased/27910-admin-can-create-project-in-all-groups.yml
@@ -0,0 +1,4 @@
+---
+title: Allow admin to view all namespaces
+merge_request:
+author: George Andrinopoulos
diff --git a/spec/helpers/namespaces_helper_spec.rb b/spec/helpers/namespaces_helper_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e5143a0263d2fa766c27f30df7fc418ad53cf393
--- /dev/null
+++ b/spec/helpers/namespaces_helper_spec.rb
@@ -0,0 +1,33 @@
+require 'spec_helper'
+
+describe NamespacesHelper, type: :helper do
+  let!(:admin) { create(:admin) }
+  let!(:admin_group) { create(:group, :private) }
+  let!(:user) { create(:user) }
+  let!(:user_group) { create(:group, :private) }
+
+  before do
+    admin_group.add_owner(admin)
+    user_group.add_owner(user)
+  end
+
+  describe '#namespaces_options' do
+    it 'returns groups without being a member for admin' do
+      allow(helper).to receive(:current_user).and_return(admin)
+
+      options = helper.namespaces_options(user_group.id, display_path: true, extra_group: user_group.id)
+
+      expect(options).to include(admin_group.name)
+      expect(options).to include(user_group.name)
+    end
+
+    it 'returns only allowed namespaces for user' do
+      allow(helper).to receive(:current_user).and_return(user)
+
+      options = helper.namespaces_options
+
+      expect(options).not_to include(admin_group.name)
+      expect(options).to include(user_group.name)
+    end
+  end
+end