@@ -117,15 +117,26 @@ removeRolesEndpoint orgHandle caller (RemoveRolesRequest {roleAssignments}) = do
117117 orgId <- orgIdByHandle orgHandle
118118 _authZReceipt <- AuthZ. permissionGuard $ AuthZ. checkEditOrgRoles caller orgId
119119 PG. runTransactionOrRespondError do
120+ let updatedUsersMap =
121+ roleAssignments
122+ & foldMap
123+ ( \ RoleAssignment {subject} ->
124+ case subject of
125+ UserSubject userId -> Map. singleton userId Set. empty
126+ _ -> Map. empty
127+ )
120128 orgRoles <- OrgQ. removeOrgRoles orgId roleAssignments
121129 OrgQ. doesOrgHaveOwner orgId >>= \ case
122130 False -> throwError OrgMustHaveOwnerError
123131 True -> pure ()
132+ let remainingRolesMap = computeOrgMembershipChanges orgRoles
133+ let usersWithNoRemainingRoles = Map. keysSet updatedUsersMap `Set.difference` Map. keysSet remainingRolesMap
124134 let evictedMembers =
125- (computeOrgMembershipChanges orgRoles)
135+ remainingRolesMap
126136 -- Only keep users who should no longer be members
127137 & Map. filter not
128138 & Map. keysSet
139+ & Set. union usersWithNoRemainingRoles
129140 OrgQ. removeOrgMembers orgId evictedMembers
130141
131142 ListRolesResponse True . canonicalRoleAssignmentOrdering <$> displaySubjectsOf (traversed . traversed) orgRoles
@@ -181,12 +192,12 @@ shouldRoleBeOrgMember = \case
181192 RoleOrgAdmin -> True
182193 RoleOrgOwner -> True
183194 RoleOrgDefault -> True
184- RoleTeamAdmin -> False
195+ RoleTeamAdmin -> True
185196 RoleProjectViewer -> False
186- RoleProjectContributor -> False
197+ RoleProjectContributor -> True
187198 RoleProjectMaintainer -> True
188- RoleProjectAdmin -> False
189- RoleProjectOwner -> False
199+ RoleProjectAdmin -> True
200+ RoleProjectOwner -> True
190201 RoleProjectPublicAccess -> False
191202
192203-- | Returns a list of users and whether they should end up as members of the org or not
0 commit comments