Merge pull request #8813 from artoscinote/ma_SCI_12273

Fix notification recipients [SCI-12273]
This commit is contained in:
Martin Artnik 2025-08-18 14:12:28 +02:00 committed by GitHub
commit 1c4ed8803f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 27 additions and 6 deletions

View file

@ -41,6 +41,30 @@ module Assignable
User.where(id: direct_user_ids).or(User.where(id: group_user_ids)).or(User.where(id: team_user_ids)) User.where(id: direct_user_ids).or(User.where(id: group_user_ids)).or(User.where(id: team_user_ids))
end end
def users_with_permission(permission, teams = Team.all)
permitted_individual_assignments = user_assignments.joins(:user_role).where(team: teams).where(
'user_roles.permissions @> ARRAY[?]::varchar[]', [permission]
)
disallowed_assignments = user_assignments.joins(:user_role).where(team: teams).where(
'NOT(user_roles.permissions @> ARRAY[?]::varchar[])', [permission]
)
permitted_user_group_assignments = user_group_assignments.joins(:user_role, user_group: { user_group_memberships: :user }).where(team: teams).where(
'user_roles.permissions @> ARRAY[?]::varchar[]', [permission]
)
permitted_team_assignments = team_assignments.joins(:user_role, team: { user_assignments: :user }).where(team: teams).where(
'user_roles.permissions @> ARRAY[?]::varchar[]', [permission]
)
User.where(id: permitted_individual_assignments.select(:user_id)).or(
User.where(id: permitted_user_group_assignments.select('user_group_memberships.user_id')).or(
User.where(id: permitted_team_assignments.select('user_assignments.user_id'))
)
).where.not(id: disallowed_assignments.select(:user_id))
end
def default_public_user_role_id(current_team = nil) def default_public_user_role_id(current_team = nil)
if team_assignments.loaded? if team_assignments.loaded?
team_assignments.find { |ta| ta.team_id == (current_team || team).id }&.user_role_id team_assignments.find { |ta| ta.team_id == (current_team || team).id }&.user_role_id

View file

@ -14,10 +14,7 @@ module Recipients
end end
return User.none unless record return User.none unless record
User.where(id: record.user_assignments record.users_with_permission(permission)
.joins(:user_role)
.where('? = ANY(user_roles.permissions)', permission)
.select(:user_id))
end end
end end
end end

View file

@ -6,7 +6,7 @@ class Recipients::RepositoryItemRecipients
end end
def recipients def recipients
repository_row = RepositoryRow.find(@repository_row_id) repository = RepositoryRow.find(@repository_row_id).repository
repository_row.repository.team.users repository.users_with_permission(RepositoryPermissions::READ, repository.team)
end end
end end