diff --git a/app/models/ability.rb b/app/models/ability.rb
index 890417e780dcbf64f9b6d508126ea28a3e862962..652c6001e08bda748fdc24fafcfaaf1fdb6078da 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -225,13 +225,15 @@ class Ability
 
     [:issue, :note, :project_snippet, :personal_snippet, :merge_request].each do |name|
       define_method "#{name}_abilities" do |user, subject|
-        if subject.author == user
-          [
+        if subject.author == user || user.is_admin?
+          rules = [
             :"read_#{name}",
             :"write_#{name}",
             :"modify_#{name}",
             :"admin_#{name}"
           ]
+          rules.push(:change_visibility_level) if subject.is_a?(Snippet)
+          rules
         elsif subject.respond_to?(:assignee) && subject.assignee == user
           [
             :"read_#{name}",