From 8f0e0ff15d0dc3da8c9d76915434cf0fd0bd6766 Mon Sep 17 00:00:00 2001 From: Imre Farkas Date: Thu, 8 Aug 2019 16:30:08 +0200 Subject: Add setting to disable project forking It also adds a new ProjectSetting table to store this setting and can be used in the future as the Project table already has too many columns. --- .../permissions/components/settings_panel.vue | 11 +++ .../permissions/mixins/settings_pannel_mixin.js | 2 + app/controllers/projects/forks_controller.rb | 7 ++ app/controllers/projects_controller.rb | 4 ++ app/helpers/projects_helper.rb | 1 + app/models/project.rb | 7 ++ app/models/project_setting.rb | 5 ++ app/policies/project_policy.rb | 9 ++- .../unreleased/15082-restrict_project_forks.yml | 5 ++ .../20190215151545_create_project_settings.rb | 20 ++++++ db/schema.rb | 9 +++ lib/gitlab/import_export/import_export.yml | 1 + locale/gitlab.pot | 3 + spec/controllers/projects/forks_controller_spec.rb | 83 ++++++++++++++++------ spec/factories/project_settings.rb | 7 ++ spec/features/projects/features_visibility_spec.rb | 2 +- spec/features/projects/fork_spec.rb | 47 ++++++++++++ .../projects/settings/project_settings_spec.rb | 20 ++++++ spec/lib/gitlab/import_export/all_models.yml | 1 + .../gitlab/import_export/safe_model_attributes.yml | 6 ++ spec/requests/api/projects_spec.rb | 14 ++++ spec/services/projects/fork_service_spec.rb | 13 ++++ spec/services/projects/update_service_spec.rb | 39 +++++++++- 23 files changed, 290 insertions(+), 26 deletions(-) create mode 100644 app/models/project_setting.rb create mode 100644 changelogs/unreleased/15082-restrict_project_forks.yml create mode 100644 db/migrate/20190215151545_create_project_settings.rb create mode 100644 spec/factories/project_settings.rb diff --git a/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue b/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue index 627d37bac68..651ab440d8c 100644 --- a/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue +++ b/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue @@ -95,6 +95,7 @@ export default { visibilityLevel: visibilityOptions.PUBLIC, issuesAccessLevel: 20, repositoryAccessLevel: 20, + forkingEnabled: true, mergeRequestsAccessLevel: 20, buildsAccessLevel: 20, wikiAccessLevel: 20, @@ -266,6 +267,16 @@ export default { name="project[project_feature_attributes][merge_requests_access_level]" /> + + +