summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/contexts/project_update_context.rb2
-rw-r--r--app/models/ability.rb10
-rw-r--r--app/views/projects/_form.html.haml12
3 files changed, 15 insertions, 9 deletions
diff --git a/app/contexts/project_update_context.rb b/app/contexts/project_update_context.rb
index e28d43d0e81..90ced7600ed 100644
--- a/app/contexts/project_update_context.rb
+++ b/app/contexts/project_update_context.rb
@@ -2,7 +2,7 @@ class ProjectUpdateContext < BaseContext
def execute(role = :default)
namespace_id = params[:project].delete(:namespace_id)
- if namespace_id.present?
+ if can?(current_user, :change_namespace, project) && namespace_id.present?
if namespace_id == Namespace.global_id
if project.namespace.present?
# Transfer to global namespace from anyone
diff --git a/app/models/ability.rb b/app/models/ability.rb
index b09899f17dc..cffb6e4277b 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -17,9 +17,7 @@ class Ability
# Rules based on role in project
if project.master_access_for?(user)
- # TODO: replace with master rules.
- # Only allow project administration for namespace owners
- rules << project_admin_rules
+ rules << project_master_rules
elsif project.dev_access_for?(user)
rules << project_dev_rules
@@ -93,13 +91,15 @@ class Ability
:admin_merge_request,
:admin_note,
:accept_mr,
- :admin_wiki
+ :admin_wiki,
+ :admin_project
]
end
def project_admin_rules
project_master_rules + [
- :admin_project
+ :change_namespace,
+ :rename_project
]
end
diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml
index 9bb411ada3e..879f1073f01 100644
--- a/app/views/projects/_form.html.haml
+++ b/app/views/projects/_form.html.haml
@@ -21,9 +21,15 @@
= f.label :namespace_id do
%span Namespace
.controls
- = f.select :namespace_id, namespaces_options(@project.namespace_id), {prompt: 'Choose a project namespace'}, {class: 'chosen'}
- &nbsp;
- %span.cred Be careful. Changing project namespace can have unintended side effects
+ - if can? current_user, :change_namespace, @project
+ = f.select :namespace_id, namespaces_options(@project.namespace_id), {prompt: 'Choose a project namespace'}, {class: 'chosen'}
+ &nbsp;
+ %span.cred Be careful. Changing project namespace can have unintended side effects
+ - else
+ %a.btn.btn-small.disabled= @project.namespace.try(:human_name) || "/"
+ &nbsp;
+ %span.cred Only owner can change project namespace.
+
- unless @project.heads.empty?
.clearfix