Backfill user_group_member_roles records for users with existing member role assignment
This backfilling should be started when all triggers to create/update/delete `user_group_member_roles` records are in place. ## Implementation plan 1. Backfill `user_group_member_roles` records for direct group membership: 1. Get all group membership with an assigned member role: `Member.where.not(member_role_id: nil).where(source_type: 'Namespace')` 2. For each `member` create `Authz::UserGroupMemberRole.new(user: member.user, group: member.source, member_role: member.member_role)` 1. Backfill `user_group_member_roles` records for shared groups: 1. Get all `GroupGroupLink` (all because users inside the invited groups might have member roles that would need to be accounted for) 2. For each `link` in (1), get all **active** members of `link.shared_with_group` 3. For each `member` in (2) 1. Determine `member_role` that should be assigned to `member.user` in `link.shared_group` 1. Create `Authz::UserGroupMemberRole.new(user: member.user, group: link.shared_group, shared_with_group: member.source, member_role: member_role.id)` (`shared_with_group` can also be `link.shared_with_group`) ## Resources - https://docs.gitlab.com/development/database/batched_background_migrations - https://docs.gitlab.com/development/database/batching_best_practices/ - https://docs.gitlab.com/development/database/insert_into_tables_in_batches/
task