diff --git a/CHANGELOG b/CHANGELOG
index b44ca54a39c9ecc0d40bfc2051b30471f8fbde89..3e4a10bb5a3f397600ebc265cd0fca07de43bf4a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -31,6 +31,7 @@ v 8.10.0 (unreleased)
   - API: Expose shared groups for projects and shared projects for groups !5050 (Robert Schilling)
   - Add "Enabled Git access protocols" to Application Settings
   - Fix user creation with stronger minimum password requirements !4054 (nathan-pmt)
+  - Only show New Snippet button to users that can create snippets.
   - PipelinesFinder uses git cache data
   - Throttle the update of `project.pushes_since_gc` to 1 minute.
   - Check for conflicts with existing Project's wiki path when creating a new project.
diff --git a/app/views/explore/snippets/index.html.haml b/app/views/explore/snippets/index.html.haml
index 9b838b9f3b7e1957b0392f638cea8e6428f440b2..6306fe6d0bfca90499ff83b1ef164e040caa599a 100644
--- a/app/views/explore/snippets/index.html.haml
+++ b/app/views/explore/snippets/index.html.haml
@@ -10,7 +10,6 @@
   - if current_user
     .pull-right
       = link_to new_snippet_path, class: "btn btn-new", title: "New Snippet" do
-        = icon('plus')
         New Snippet
 
   .oneline
diff --git a/app/views/projects/snippets/_actions.html.haml b/app/views/projects/snippets/_actions.html.haml
index bf57beb9d071413bf3fafd4c103635a4de92f91d..bdbf3e5f4d6b875aed2f0e016935408a538c5168 100644
--- a/app/views/projects/snippets/_actions.html.haml
+++ b/app/views/projects/snippets/_actions.html.haml
@@ -1,27 +1,29 @@
 .hidden-xs
-  = link_to new_namespace_project_snippet_path(@project.namespace, @project), class: 'btn btn-grouped btn-create new-snippet-link', title: "New Snippet" do
-    = icon('plus')
-    New Snippet
+  - if can?(current_user, :create_project_snippet, @project)
+    = link_to new_namespace_project_snippet_path(@project.namespace, @project), class: 'btn btn-grouped btn-create new-snippet-link', title: "New Snippet" do
+      New Snippet
   - if can?(current_user, :update_project_snippet, @snippet)
     = link_to edit_namespace_project_snippet_path(@project.namespace, @project, @snippet), class: "btn btn-grouped snippable-edit" do
       Edit
   - if can?(current_user, :update_project_snippet, @snippet)
     = link_to namespace_project_snippet_path(@project.namespace, @project, @snippet), method: :delete, data: { confirm: "Are you sure?" }, class: "btn btn-grouped btn-warning", title: 'Delete Snippet' do
       Delete
-.visible-xs-block.dropdown
-  %button.btn.btn-default.btn-block.append-bottom-0.prepend-top-5{ data: { toggle: "dropdown" } }
-    Options
-    %span.caret
-  .dropdown-menu.dropdown-menu-full-width
-    %ul
-      %li
-        = link_to new_namespace_project_snippet_path(@project.namespace, @project), title: "New Snippet" do
-          New Snippet
-      - if can?(current_user, :update_project_snippet, @snippet)
-        %li
-          = link_to edit_namespace_project_snippet_path(@project.namespace, @project, @snippet) do
-            Edit
-      - if can?(current_user, :update_project_snippet, @snippet)
-        %li
-          = link_to namespace_project_snippet_path(@project.namespace, @project, @snippet), method: :delete, data: { confirm: "Are you sure?" }, title: 'Delete Snippet' do
-            Delete
+- if can?(current_user, :create_project_snippet, @project) || can?(current_user, :update_project_snippet, @snippet)
+  .visible-xs-block.dropdown
+    %button.btn.btn-default.btn-block.append-bottom-0.prepend-top-5{ data: { toggle: "dropdown" } }
+      Options
+      %span.caret
+    .dropdown-menu.dropdown-menu-full-width
+      %ul
+        - if can?(current_user, :create_project_snippet, @project)
+          %li
+            = link_to new_namespace_project_snippet_path(@project.namespace, @project), title: "New Snippet" do
+              New Snippet
+        - if can?(current_user, :update_project_snippet, @snippet)
+          %li
+            = link_to edit_namespace_project_snippet_path(@project.namespace, @project, @snippet) do
+              Edit
+        - if can?(current_user, :update_project_snippet, @snippet)
+          %li
+            = link_to namespace_project_snippet_path(@project.namespace, @project, @snippet), method: :delete, data: { confirm: "Are you sure?" }, title: 'Delete Snippet' do
+              Delete
diff --git a/app/views/projects/snippets/index.html.haml b/app/views/projects/snippets/index.html.haml
index 96fee3b17b215ac4773e4cfa3a9ccfed25c2b8dd..6c994ae486b98c33167b27d3fcc64f1b364e0a5f 100644
--- a/app/views/projects/snippets/index.html.haml
+++ b/app/views/projects/snippets/index.html.haml
@@ -2,9 +2,9 @@
 
 .row-content-block.top-block
   .pull-right
-    = link_to new_namespace_project_snippet_path(@project.namespace, @project), class: "btn btn-new", title: "New Snippet" do
-      = icon('plus')
-      New Snippet
+    - if can?(current_user, :create_project_snippet, @project)
+      = link_to new_namespace_project_snippet_path(@project.namespace, @project), class: "btn btn-new", title: "New Snippet" do
+        New Snippet
 
   .oneline
     Share code pastes with others out of git repository
diff --git a/app/views/snippets/_actions.html.haml b/app/views/snippets/_actions.html.haml
index a7769654b61c280b5e8213c841bd13865a75a34e..2957ff919e16309ebb3946e095f0c86f94c8f9c6 100644
--- a/app/views/snippets/_actions.html.haml
+++ b/app/views/snippets/_actions.html.haml
@@ -1,27 +1,28 @@
 .hidden-xs
-  = link_to new_snippet_path, class: "btn btn-grouped btn-create new-snippet-link", title: "New Snippet" do
-    = icon('plus')
-    New Snippet
+  - if current_user
+    = link_to new_snippet_path, class: "btn btn-grouped btn-create new-snippet-link", title: "New Snippet" do
+      New Snippet
   - if can?(current_user, :update_personal_snippet, @snippet)
     = link_to edit_snippet_path(@snippet), class: "btn btn-grouped snippable-edit" do
       Edit
   - if can?(current_user, :admin_personal_snippet, @snippet)
     = link_to snippet_path(@snippet), method: :delete, data: { confirm: "Are you sure?" }, class: "btn btn-grouped btn-warning", title: 'Delete Snippet' do
       Delete
-.visible-xs-block.dropdown
-  %button.btn.btn-default.btn-block.append-bottom-0.prepend-top-5{ data: { toggle: "dropdown" } }
-    Options
-    %span.caret
-  .dropdown-menu.dropdown-menu-full-width
-    %ul
-      %li
-        = link_to new_snippet_path, title: "New Snippet" do
-          New Snippet
-      - if can?(current_user, :update_personal_snippet, @snippet)
+- if current_user
+  .visible-xs-block.dropdown
+    %button.btn.btn-default.btn-block.append-bottom-0.prepend-top-5{ data: { toggle: "dropdown" } }
+      Options
+      %span.caret
+    .dropdown-menu.dropdown-menu-full-width
+      %ul
         %li
-          = link_to edit_snippet_path(@snippet) do
-            Edit
-      - if can?(current_user, :admin_personal_snippet, @snippet)
-        %li
-          = link_to snippet_path(@snippet), method: :delete, data: { confirm: "Are you sure?" }, title: 'Delete Snippet' do
-            Delete
+          = link_to new_snippet_path, title: "New Snippet" do
+            New Snippet
+        - if can?(current_user, :update_personal_snippet, @snippet)
+          %li
+            = link_to edit_snippet_path(@snippet) do
+              Edit
+        - if can?(current_user, :admin_personal_snippet, @snippet)
+          %li
+            = link_to snippet_path(@snippet), method: :delete, data: { confirm: "Are you sure?" }, title: 'Delete Snippet' do
+              Delete