summaryrefslogtreecommitdiff
path: root/app/services/members/projects/creator_service.rb
blob: d92fe60c54aa700daa63979710f24864ade7e94d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# frozen_string_literal: true

module Members
  module Projects
    class CreatorService < Members::CreatorService
      private

      def can_create_new_member?
        # order is important here!
        # The `admin_project_member` check has side-effects that causes projects not be created if this area is hit
        # during project creation.
        # Call that triggers is current_user.can?(:admin_project_member, member.project)
        # I tracked back to base_policy.rb admin check and specifically in
        # Gitlab::Auth::CurrentUserMode.new(@user).admin_mode? call.
        # This calls user.admin? and that specific call causes issues with project creation in
        # spec/requests/api/projects_spec.rb specs and others, mostly around project creation.
        # https://gitlab.com/gitlab-org/gitlab/-/issues/358931 for investigation
        adding_the_creator_as_owner_in_a_personal_project? || current_user.can?(:admin_project_member, member.project)
      end

      def can_update_existing_member?
        current_user.can?(:update_project_member, member)
      end

      def adding_the_creator_as_owner_in_a_personal_project?
        # this condition is reached during testing setup a lot due to use of `.add_user`
        member.project.personal_namespace_holder?(member.user)
      end
    end
  end
end