From 573e4a0cb47cd0e84193e482c2c258849041fac7 Mon Sep 17 00:00:00 2001 From: stanig2106 Date: Sat, 2 May 2026 22:06:53 +0200 Subject: [PATCH] [Workavia] Drop double-save in remote.ts that wiped user.cache.companies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Upstream OIDC remote.updateUser does: 1. users.save(user) — basic fields, cache.companies unset 2. companies.setUserRole(company, user) — fetches fresh user, pushes company id into cache.companies, users.save() that fresh user 3. users.save(user) — saves the LOCAL stale user, overwriting (2) Step 3 is what breaks: cache.companies ends up empty in DB, the user search index loses the companies field, and the share-picker can't find users from the same Company. Removing step 3 fixes it: setUserRole's save is the authoritative one. --- .../node/src/services/console/clients/remote.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tdrive/backend/node/src/services/console/clients/remote.ts b/tdrive/backend/node/src/services/console/clients/remote.ts index 22c8ff2d..692eb440 100644 --- a/tdrive/backend/node/src/services/console/clients/remote.ts +++ b/tdrive/backend/node/src/services/console/clients/remote.ts @@ -214,8 +214,16 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { await gr.services.companies.setUserRole(company.id, user.id, userRole); - await gr.services.users.save(user, { user: { id: user.id, server_request: true } }); - + // [Workavia] Removed an upstream `users.save(user, ...)` here that + // overwrote the user record after setUserRole (line above) had + // already fetched a fresh user, pushed the new companyId into + // user.cache.companies, and saved. Saving the stale local `user` + // object on top wiped cache.companies → the OpenSearch `user` index + // ended up with an empty `companies` field → frontend share-picker + // search returned zero results for same-Company users. Without this + // double-save, setUserRole's save is the last write and the index + // is correct. Surfacing this comment so it doesn't get reintroduced + // on rebase. return user; }