# UNDF: UNDF-2026-000000878 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -700,9 +700,10 @@ members = Member.joins(:project, :member_roles). where("#{Project.table_name}.status <> 9"). where("#{Member.table_name}.user_id = ? OR (#{Project.table_name}.is_public = ? AND #{Member.table_name}.user_id = ?)", self.id, true, group_id). pluck(:user_id, :role_id, :project_id) + project_ids_set = project_ids.to_set # O(1) lookup instead of O(P) Array#include? hash = {} members.each do |user_id, role_id, project_id| # Ignore the roles of the builtin group if the user is a member of the project - next if user_id != id && project_ids.include?(project_id) + next if user_id != id && project_ids_set.include?(project_id) hash[role_id] ||= [] hash[role_id] << project_id