diff --git a/app/controllers/groups/milestones_controller.rb b/app/controllers/groups/milestones_controller.rb
index 6833a550c9eb97f23af2da79bf0b3fa9e64435bc..10233222ee1b8f76c6a78fe1a29c05cfbf33122a 100644
--- a/app/controllers/groups/milestones_controller.rb
+++ b/app/controllers/groups/milestones_controller.rb
@@ -38,7 +38,7 @@ class Groups::MilestonesController < Groups::ApplicationController
   private
 
   def authorize_group_milestone!
-    return render_404 unless can?(current_user, :admin_group, group)
+    return render_404 unless can?(current_user, :admin_milestones, group)
   end
 
   def milestone_params
diff --git a/app/models/ability.rb b/app/models/ability.rb
index 5ae28d5133e63296f885e26c6d72ed3c038ebebc..d01b3ae6f050a88b91e996212cab05546811c50d 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -233,6 +233,7 @@ class Ability
       if group.has_master?(user) || group.has_owner?(user) || user.admin?
         rules.push(*[
           :create_projects,
+          :admin_milestones
         ])
       end
 
diff --git a/app/views/groups/milestones/_milestone.html.haml b/app/views/groups/milestones/_milestone.html.haml
index 41dffdd2fb83fdb3d01e337ebf48c17de5bf6b2a..a20bf75bc39e2d320651479f0a116a9f90935a9c 100644
--- a/app/views/groups/milestones/_milestone.html.haml
+++ b/app/views/groups/milestones/_milestone.html.haml
@@ -22,7 +22,7 @@
             %span.label.label-gray
               = milestone.project.name
     .col-sm-6
-      - if can?(current_user, :admin_group, @group)
+      - if can?(current_user, :admin_milestones, @group)
         - if milestone.closed?
           = link_to 'Reopen Milestone', group_milestone_path(@group, milestone.safe_title, title: milestone.title, milestone: {state_event: :activate }), method: :put, class: "btn btn-xs btn-grouped btn-reopen"
         - else
diff --git a/app/views/groups/milestones/index.html.haml b/app/views/groups/milestones/index.html.haml
index ffd7dd3fc0b5b68fce7d3882df8b5ff73a74e385..84ec77c61888e082a057a9e6e74230bf8520e416 100644
--- a/app/views/groups/milestones/index.html.haml
+++ b/app/views/groups/milestones/index.html.haml
@@ -3,10 +3,11 @@
 
 = render 'shared/milestones_filter'
 .gray-content-block
-  .pull-right
-    %span.pull-right.hidden-xs
-      = link_to new_group_milestone_path(@group), class: "btn btn-new" do
-        New Milestone
+  - if can?(current_user, :admin_milestones, @group)
+    .pull-right
+      %span.pull-right.hidden-xs
+        = link_to new_group_milestone_path(@group), class: "btn btn-new" do
+          New Milestone
 
   .oneline
     Only milestones from
diff --git a/app/views/groups/milestones/show.html.haml b/app/views/groups/milestones/show.html.haml
index e609abca08e3e3ad16654aae771d71e06627b028..716e93f558b551091a8fb26848646b63faf85022 100644
--- a/app/views/groups/milestones/show.html.haml
+++ b/app/views/groups/milestones/show.html.haml
@@ -9,7 +9,7 @@
       Open
   Milestone #{@milestone.title}
   .pull-right
-    - if can?(current_user, :admin_group, @group)
+    - if can?(current_user, :admin_milestones, @group)
       - if @milestone.active?
         = link_to 'Close Milestone', group_milestone_path(@group, @milestone.safe_title, title: @milestone.title, milestone: {state_event: :close }), method: :put, class: "btn btn-sm btn-close"
       - else