RemoveMemberFromAllGroups removes a user from all groups in a workspace via a single SQL update. member format is "users/{email}".
(ctx context.Context, workspaceID string, member string)
| 335 | // RemoveMemberFromAllGroups removes a user from all groups in a workspace via a single SQL update. |
| 336 | // member format is "users/{email}". |
| 337 | func (s *Store) RemoveMemberFromAllGroups(ctx context.Context, workspaceID string, member string) error { |
| 338 | query := ` |
| 339 | UPDATE user_group |
| 340 | SET payload = jsonb_set( |
| 341 | payload, |
| 342 | '{members}', |
| 343 | COALESCE( |
| 344 | (SELECT jsonb_agg(m) FROM jsonb_array_elements(payload->'members') m WHERE m->>'member' != $1), |
| 345 | '[]'::jsonb |
| 346 | ) |
| 347 | ) |
| 348 | WHERE workspace = $2 |
| 349 | AND EXISTS (SELECT 1 FROM jsonb_array_elements(payload->'members') m WHERE m->>'member' = $1)` |
| 350 | if _, err := s.GetDB().ExecContext(ctx, query, member, workspaceID); err != nil { |
| 351 | return errors.Wrapf(err, "failed to remove member %q from groups in workspace %q", member, workspaceID) |
| 352 | } |
| 353 | // Purge caches since we can't know which groups were affected. |
| 354 | s.groupCache.Purge() |
| 355 | s.groupMembersCache.Purge() |
| 356 | s.memberGroupsCache.Purge() |
| 357 | return nil |
| 358 | } |
| 359 | |
| 360 | // GetUserGroupsSnapshot returns groups for a user with snapshot reads (with cache). |
| 361 | // userName format is "users/{email}". |