diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-05-19 10:33:21 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-05-19 10:33:21 +0300 |
commit | 36a59d088eca61b834191dacea009677a96c052f (patch) | |
tree | e4f33972dab5d8ef79e3944a9f403035fceea43f /app/services/authorized_project_update | |
parent | a1761f15ec2cae7c7f7bbda39a75494add0dfd6f (diff) |
Add latest changes from gitlab-org/gitlab@15-0-stable-eev15.0.0-rc42
Diffstat (limited to 'app/services/authorized_project_update')
3 files changed, 2 insertions, 106 deletions
diff --git a/app/services/authorized_project_update/project_access_changed_service.rb b/app/services/authorized_project_update/project_access_changed_service.rb index 62bf4ced1ae..dafec1fef59 100644 --- a/app/services/authorized_project_update/project_access_changed_service.rb +++ b/app/services/authorized_project_update/project_access_changed_service.rb @@ -7,6 +7,8 @@ module AuthorizedProjectUpdate end def execute(blocking: true) + return if @project_ids.empty? + bulk_args = @project_ids.map { |id| [id] } if blocking diff --git a/app/services/authorized_project_update/project_create_service.rb b/app/services/authorized_project_update/project_create_service.rb deleted file mode 100644 index 5809315a066..00000000000 --- a/app/services/authorized_project_update/project_create_service.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -module AuthorizedProjectUpdate - class ProjectCreateService < BaseService - BATCH_SIZE = 1000 - - def initialize(project) - @project = project - end - - def execute - group = project.group - - unless group - return ServiceResponse.error(message: 'Project does not have a group') - end - - group.members_from_self_and_ancestors_with_effective_access_level - .each_batch(of: BATCH_SIZE, column: :user_id) do |members| - attributes = members.map do |member| - { user_id: member.user_id, project_id: project.id, access_level: member.access_level } - end - - ProjectAuthorization.insert_all(attributes) unless attributes.empty? - end - - ServiceResponse.success - end - - private - - attr_reader :project - end -end diff --git a/app/services/authorized_project_update/project_group_link_create_service.rb b/app/services/authorized_project_update/project_group_link_create_service.rb deleted file mode 100644 index 10cf4c50569..00000000000 --- a/app/services/authorized_project_update/project_group_link_create_service.rb +++ /dev/null @@ -1,72 +0,0 @@ -# frozen_string_literal: true - -module AuthorizedProjectUpdate - class ProjectGroupLinkCreateService < BaseService - include Gitlab::Utils::StrongMemoize - - BATCH_SIZE = 1000 - - def initialize(project, group, group_access = nil) - @project = project - @group = group - @group_access = group_access - end - - def execute - group.members_from_self_and_ancestors_with_effective_access_level - .each_batch(of: BATCH_SIZE, column: :user_id) do |members| - existing_authorizations = existing_project_authorizations(members) - authorizations_to_create = [] - user_ids_to_delete = [] - - members.each do |member| - new_access_level = access_level(member.access_level) - existing_access_level = existing_authorizations[member.user_id] - - if existing_access_level - # User might already have access to the project unrelated to the - # current project share - next if existing_access_level >= new_access_level - - user_ids_to_delete << member.user_id - end - - authorizations_to_create << { user_id: member.user_id, - project_id: project.id, - access_level: new_access_level } - end - - update_authorizations(user_ids_to_delete, authorizations_to_create) - end - - ServiceResponse.success - end - - private - - attr_reader :project, :group, :group_access - - def access_level(membership_access_level) - return membership_access_level unless group_access - - # access level (role) must not be higher than the max access level (role) set when - # creating the project share - [membership_access_level, group_access].min - end - - def existing_project_authorizations(members) - user_ids = members.map(&:user_id) - - ProjectAuthorization.where(project_id: project.id, user_id: user_ids) # rubocop: disable CodeReuse/ActiveRecord - .select(:user_id, :access_level) - .each_with_object({}) do |authorization, hash| - hash[authorization.user_id] = authorization.access_level - end - end - - def update_authorizations(user_ids_to_delete, authorizations_to_create) - project.remove_project_authorizations(user_ids_to_delete) if user_ids_to_delete.any? - ProjectAuthorization.insert_all_in_batches(authorizations_to_create) if authorizations_to_create.any? - end - end -end |