Skip to content

MembersFinder should return invited group members of parent group

Problem

Consider the following group/project hierarchy:

+ Group A
  - User 1
+ Group B
  + Project
  • User 1 belongs to Group A.
  • Project belongs to Group B.
  • Group A and Group B are siblings.
  • Group B invites Group A. Now User 1 is an indirect member of Project.

In this configuration, MembersFinder currently does not return User 1 even when :invited_groups is used.

Possibly related to !83214 (merged).

What does it mean for users?

ProjectMembers GraphQL field does not return all users leading to an inconsistent autocompletion UX.

  • The new issue page uses a dedicated autocompletion finder/controller and currently returns all invited group members of a parent group.

  • The assignee dropdown of a project board uses Project GraphQL query and ProjectMembers field as the backend.

New issue page Project board assignee dropdown
image image

The user @johndoe1 belongs to a group invited to some-group in the above screenshots.

Possible fix

A possible fix would be to include :shared_from_groups when executing GroupMembersFinder:

diff --git a/app/finders/members_finder.rb b/app/finders/members_finder.rb
index de2a4ce3518b..037437a70353 100644
--- a/app/finders/members_finder.rb
+++ b/app/finders/members_finder.rb
@@ -68,9 +68,10 @@ def group_union_members(include_relations)
   end
 
   def direct_group_members(include_descendants)
-    requested_relations = [:inherited, :direct]
+    requested_relations = [:inherited, :direct, :shared_from_groups]
     requested_relations << :descendants if include_descendants
-    GroupMembersFinder.new(group).execute(include_relations: requested_relations).non_invite.non_minimal_access # rubocop: disable CodeReuse/Finder
+
+    GroupMembersFinder.new(group, @current_user).execute(include_relations: requested_relations).non_invite.non_minimal_access # rubocop: disable CodeReuse/Finder
   end
 
   def project_invited_groups
Edited by euko