diff options
| author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-07-10 12:05:54 +0000 |
|---|---|---|
| committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-07-10 12:05:54 +0000 |
| commit | bda04bc687e5fafc05d07fa234c96e49d9c4f3fc (patch) | |
| tree | 9aefc4c84361cb769fc499d4e33c501d0f44a462 /app | |
| parent | 7574ec4b85e03f1c1f5d957eee2ef7b29f718c80 (diff) | |
| parent | 111ebe54712aca16f3ad0f3d859c1c036ccb9f09 (diff) | |
| download | gitlab-ce-bda04bc687e5fafc05d07fa234c96e49d9c4f3fc.tar.gz | |
Merge branch 'fork_visibility_level' into 'master'
Forks should not have more permissive visibility levels than the original
https://dev.gitlab.org/gitlab/gitlabhq/issues/2286
See merge request !936
Diffstat (limited to 'app')
| -rw-r--r-- | app/helpers/projects_helper.rb | 10 | ||||
| -rw-r--r-- | app/helpers/visibility_level_helper.rb | 6 | ||||
| -rw-r--r-- | app/views/projects/edit.html.haml | 2 | ||||
| -rw-r--r-- | app/views/shared/_visibility_radios.html.haml | 1 |
4 files changed, 18 insertions, 1 deletions
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index cef23a52e34..aa15398cbed 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -92,6 +92,16 @@ module ProjectsHelper end end + def can_change_visibility_level?(project, current_user) + return false unless can?(current_user, :change_visibility_level, project) + + if project.forked? + project.forked_from_project.visibility_level > Gitlab::VisibilityLevel::PRIVATE + else + true + end + end + private def get_project_nav_tabs(project, current_user) diff --git a/app/helpers/visibility_level_helper.rb b/app/helpers/visibility_level_helper.rb index 00d4c7f1051..b52cd23aba2 100644 --- a/app/helpers/visibility_level_helper.rb +++ b/app/helpers/visibility_level_helper.rb @@ -86,4 +86,10 @@ module VisibilityLevelHelper def default_snippet_visibility current_application_settings.default_snippet_visibility end + + def skip_level?(form_model, level) + form_model.is_a?(Project) && + form_model.forked? && + !Gitlab::VisibilityLevel.allowed_fork_levels(form_model.forked_from_project.visibility_level).include?(level) + end end diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml index 7ef42ac0f8c..e8e65d87f47 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/edit.html.haml @@ -29,7 +29,7 @@ .col-sm-10= f.select(:default_branch, @repository.branch_names, {}, {class: 'select2 select-wide'}) - = render 'shared/visibility_level', f: f, visibility_level: @project.visibility_level, can_change_visibility_level: can?(current_user, :change_visibility_level, @project), form_model: @project + = render 'shared/visibility_level', f: f, visibility_level: @project.visibility_level, can_change_visibility_level: can_change_visibility_level?(@project, current_user), form_model: @project .form-group = f.label :tag_list, "Tags", class: 'control-label' diff --git a/app/views/shared/_visibility_radios.html.haml b/app/views/shared/_visibility_radios.html.haml index 02416125a72..ebe2eb0433d 100644 --- a/app/views/shared/_visibility_radios.html.haml +++ b/app/views/shared/_visibility_radios.html.haml @@ -1,4 +1,5 @@ - Gitlab::VisibilityLevel.values.each do |level| + - next if skip_level?(form_model, level) .radio - restricted = restricted_visibility_levels.include?(level) = form.label "#{model_method}_#{level}" do |
