Skip to content

Commit cacc95b

Browse files
committed
Fix org membership logic for users who have no remaining roles
1 parent f2197dd commit cacc95b

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

src/Share/Web/Share/Orgs/Impl.hs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)