diff --git a/app/assets/javascripts/issues/list/components/issues_list_app.vue b/app/assets/javascripts/issues/list/components/issues_list_app.vue
index 8ac7990c28d6a59a386166cbaa9694ede535f199..6add82ebed8750b3f29e1a2d8fda37fdee5b2938 100644
--- a/app/assets/javascripts/issues/list/components/issues_list_app.vue
+++ b/app/assets/javascripts/issues/list/components/issues_list_app.vue
@@ -163,6 +163,7 @@ export default {
     'autocompleteAwardEmojisPath',
     'calendarPath',
     'canBulkUpdate',
+    'canCreateIssue',
     'canReadCrmContact',
     'canReadCrmOrganization',
     'exportCsvPath',
@@ -330,7 +331,7 @@ export default {
       return this.isProject && this.isSignedIn;
     },
     showIssuableByEmail() {
-      return this.initialEmail && this.isSignedIn;
+      return this.initialEmail && this.canCreateIssue;
     },
     showNewIssueDropdown() {
       return !this.isProject && this.hasAnyProjects;
diff --git a/app/assets/javascripts/issues/list/index.js b/app/assets/javascripts/issues/list/index.js
index ab6ff82555498a6be600742df6f05486dab9e6aa..c2507b4b82cb83f282ad6b14e671f331cd7bf3ea 100644
--- a/app/assets/javascripts/issues/list/index.js
+++ b/app/assets/javascripts/issues/list/index.js
@@ -56,6 +56,7 @@ export async function mountIssuesListApp() {
     autocompleteAwardEmojisPath,
     calendarPath,
     canBulkUpdate,
+    canCreateIssue,
     canCreateProjects,
     canEdit,
     canImportIssues,
@@ -116,6 +117,7 @@ export async function mountIssuesListApp() {
       autocompleteAwardEmojisPath,
       calendarPath,
       canBulkUpdate: parseBoolean(canBulkUpdate),
+      canCreateIssue: parseBoolean(canCreateIssue),
       canCreateProjects: parseBoolean(canCreateProjects),
       canReadCrmContact: parseBoolean(canReadCrmContact),
       canReadCrmOrganization: parseBoolean(canReadCrmOrganization),
diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb
index b9499d1307658b08c6eb69ce361ed7d6e3139421..f407ac5066ee1629a240f09eedb9e16e4b974ac1 100644
--- a/app/helpers/issues_helper.rb
+++ b/app/helpers/issues_helper.rb
@@ -183,6 +183,7 @@ def has_issue_date_filter_feature?(namespace, current_user)
   def project_issues_list_data(project, current_user)
     common_issues_list_data(project, current_user).merge(
       can_bulk_update: can?(current_user, :admin_issue, project).to_s,
+      can_create_issue: can?(current_user, :create_issue, project).to_s,
       can_edit: can?(current_user, :admin_project, project).to_s,
       can_import_issues: can?(current_user, :import_issues, @project).to_s,
       can_read_crm_contact: can?(current_user, :read_crm_contact, project.group).to_s,
diff --git a/app/views/projects/merge_requests/index.html.haml b/app/views/projects/merge_requests/index.html.haml
index 86a89f19882a7b5091fb552fe0b37c72f37044bc..e9a9b1fe401e1dd218f728348905d27214aba779 100644
--- a/app/views/projects/merge_requests/index.html.haml
+++ b/app/views/projects/merge_requests/index.html.haml
@@ -29,6 +29,6 @@
 - else
   = render 'shared/empty_states/merge_requests', button_path: new_merge_request_path
 
-- if new_merge_request_email
+- if new_merge_request_email && can?(current_user, :create_merge_request_in, @project)
   .gl-text-center.gl-pt-5.gl-pb-7
     .js-issuable-by-email{ data: { initial_email: new_merge_request_email, issuable_type: issuable_type, emails_help_page_path: help_page_path('development/emails', anchor: 'email-namespace'), quick_actions_help_path: help_page_path('user/project/quick_actions'), markdown_help_path: help_page_path('user/markdown'), reset_path: new_issuable_address_project_path(@project, issuable_type: issuable_type) } }
diff --git a/ee/spec/frontend/issues/list/components/issues_list_app_spec.js b/ee/spec/frontend/issues/list/components/issues_list_app_spec.js
index 05a253e03503113ba0453b85268aa2c0ea38c237..ada741b86d9d9c86d3b7c8070bb2e1c90de6959c 100644
--- a/ee/spec/frontend/issues/list/components/issues_list_app_spec.js
+++ b/ee/spec/frontend/issues/list/components/issues_list_app_spec.js
@@ -55,6 +55,7 @@ describe('EE IssuesListApp component', () => {
     autocompleteAwardEmojisPath: 'autocomplete/award/emojis/path',
     calendarPath: 'calendar/path',
     canBulkUpdate: false,
+    canCreateIssue: false,
     canCreateProjects: false,
     canReadCrmContact: false,
     canReadCrmOrganization: false,
diff --git a/spec/frontend/issues/list/components/issues_list_app_spec.js b/spec/frontend/issues/list/components/issues_list_app_spec.js
index b432a29ee5c76add4409e888b159b8707cf22e8d..e0e210ed10f2b85ba2045a2e08556049bca365bb 100644
--- a/spec/frontend/issues/list/components/issues_list_app_spec.js
+++ b/spec/frontend/issues/list/components/issues_list_app_spec.js
@@ -103,6 +103,7 @@ describe('CE IssuesListApp component', () => {
     autocompleteAwardEmojisPath: 'autocomplete/award/emojis/path',
     calendarPath: 'calendar/path',
     canBulkUpdate: false,
+    canCreateIssue: false,
     canCreateProjects: false,
     canReadCrmContact: false,
     canReadCrmOrganization: false,
@@ -543,20 +544,16 @@ describe('CE IssuesListApp component', () => {
 
   describe('IssuableByEmail component', () => {
     describe.each`
-      initialEmail | hasAnyIssues | isSignedIn | exists
-      ${false}     | ${false}     | ${false}   | ${false}
-      ${false}     | ${true}      | ${false}   | ${false}
-      ${false}     | ${false}     | ${true}    | ${false}
-      ${false}     | ${true}      | ${true}    | ${false}
-      ${true}      | ${false}     | ${false}   | ${false}
-      ${true}      | ${true}      | ${false}   | ${false}
-      ${true}      | ${false}     | ${true}    | ${true}
-      ${true}      | ${true}      | ${true}    | ${true}
+      initialEmail | canCreateIssue | exists
+      ${false}     | ${false}       | ${false}
+      ${false}     | ${true}        | ${false}
+      ${true}      | ${false}       | ${false}
+      ${true}      | ${true}        | ${true}
     `(
       `when issue creation by email is enabled=$initialEmail`,
-      ({ initialEmail, hasAnyIssues, isSignedIn, exists }) => {
+      ({ initialEmail, canCreateIssue, exists }) => {
         it(`${initialEmail ? 'renders' : 'does not render'}`, () => {
-          wrapper = mountComponent({ provide: { initialEmail, hasAnyIssues, isSignedIn } });
+          wrapper = mountComponent({ provide: { initialEmail, canCreateIssue } });
 
           expect(findIssuableByEmail().exists()).toBe(exists);
         });
diff --git a/spec/helpers/issues_helper_spec.rb b/spec/helpers/issues_helper_spec.rb
index 6a6808cd8d29b64ff5083450e14b9b42d6fcc7e1..e9b88a1f5f515d2e8c35ac342cc45eaa0af94832 100644
--- a/spec/helpers/issues_helper_spec.rb
+++ b/spec/helpers/issues_helper_spec.rb
@@ -208,6 +208,7 @@
         autocomplete_award_emojis_path: autocomplete_award_emojis_path,
         calendar_path: '#',
         can_bulk_update: 'true',
+        can_create_issue: 'true',
         can_edit: 'true',
         can_import_issues: 'true',
         email: current_user&.notification_email_or_default,