feat: persist current workspace in user sessions
This commit is contained in:
+4
-2
@@ -76,15 +76,17 @@
|
||||
- `GET /api/auth/session`
|
||||
- `GET /api/auth/profile`
|
||||
- `PATCH /api/auth/profile`
|
||||
- `POST /api/auth/current-workspace`
|
||||
- `POST /api/auth/password`
|
||||
|
||||
Контракт:
|
||||
|
||||
- `POST /login` принимает `email` и `password`;
|
||||
- при успешном логине backend выставляет `HttpOnly` session cookie;
|
||||
- `GET /session` возвращает текущего пользователя и memberships;
|
||||
- `GET /profile` возвращает текущего пользователя и memberships для settings UI;
|
||||
- `GET /session` возвращает текущего пользователя, memberships и `current_workspace_id`;
|
||||
- `GET /profile` возвращает текущего пользователя, memberships и `current_workspace_id` для settings UI;
|
||||
- `PATCH /profile` обновляет `display_name` и `email` текущего пользователя;
|
||||
- `POST /current-workspace` переключает текущий workspace внутри текущей authenticated session;
|
||||
- `POST /password` меняет пароль текущего пользователя после проверки `current_password`;
|
||||
- `POST /logout` инвалидирует текущую session.
|
||||
|
||||
|
||||
@@ -115,7 +115,6 @@ UI-файлы:
|
||||
|
||||
Что еще не хватает:
|
||||
|
||||
- server-side current workspace model вместо client-side `localStorage`;
|
||||
- дальнейший UX polish вокруг gRPC discovery, потому что server reflection сознательно заменен на descriptor-driven live flow;
|
||||
- возможные smoke tests для `wizard`, чтобы закрепить уже подключенный live contract.
|
||||
|
||||
@@ -128,6 +127,7 @@ UI-файлы:
|
||||
Простой итог:
|
||||
|
||||
- wizard почти готов для реального backend;
|
||||
- текущий workspace для wizard уже приходит из auth session, а не только из client-side `localStorage`;
|
||||
- это основной экран второй очереди после catalog;
|
||||
- базовый create/edit draft flow уже можно посадить на live `create/get version/update` endpoints;
|
||||
- следующий разрыв здесь - test/publish/import/export wiring и полноценный gRPC descriptor-set lifecycle.
|
||||
@@ -312,13 +312,10 @@ UI-файлы:
|
||||
|
||||
Что еще не хватает:
|
||||
|
||||
- `switch current workspace` все еще живет на клиенте, а не в session/backend;
|
||||
- session-aware current workspace model;
|
||||
- finer-grained permission matrix beyond current `owner/admin` management rules.
|
||||
|
||||
Отдельный конфликт:
|
||||
|
||||
- current workspace по-прежнему client-side;
|
||||
- memberships, role-management и invitations уже live;
|
||||
- `settings` page не должна дублировать этот flow, пока у нее нет своего backend-контракта
|
||||
|
||||
@@ -326,7 +323,7 @@ UI-файлы:
|
||||
|
||||
- `workspace-setup` уже подключен к live backend;
|
||||
- create/edit workspace, memberships, invitations, export и delete работают;
|
||||
- текущий workspace все еще остается client-side моделью.
|
||||
- текущий workspace уже синхронизируется через auth session и используется всеми live страницами.
|
||||
|
||||
### 4.8. Settings
|
||||
|
||||
@@ -347,6 +344,7 @@ UI-файлы:
|
||||
- `GET /api/auth/session`
|
||||
- `GET /api/auth/profile`
|
||||
- `PATCH /api/auth/profile`
|
||||
- `POST /api/auth/current-workspace`
|
||||
- `POST /api/auth/password`
|
||||
- workspace block через `GET /api/admin/workspaces/{workspace_id}`
|
||||
- `PATCH /api/admin/workspaces/{workspace_id}`
|
||||
@@ -354,8 +352,7 @@ UI-файлы:
|
||||
Что еще не хватает:
|
||||
|
||||
- preferences endpoint;
|
||||
- полноценный advanced security model (`2FA`, passkeys, session inventory);
|
||||
- session-aware current workspace model вместо client-side `localStorage`.
|
||||
- полноценный advanced security model (`2FA`, passkeys, session inventory).
|
||||
|
||||
Отдельный конфликт:
|
||||
|
||||
@@ -437,13 +434,13 @@ UI вводит scope `deploy`, backend пока не отражает полн
|
||||
|
||||
### 5.4. Workspace switching
|
||||
|
||||
UI хранит current workspace в `localStorage`.
|
||||
UI хранит current workspace в auth session и использует `localStorage` только как cache/fallback.
|
||||
|
||||
Решение:
|
||||
|
||||
- на ближайшем этапе оставить client-side current workspace;
|
||||
- данные workspace брать с backend;
|
||||
- позже заменить на session-aware current workspace model.
|
||||
- backend хранит `current_workspace_id` в user session;
|
||||
- `POST /api/auth/current-workspace` переключает активный workspace;
|
||||
- клиент использует `localStorage` только как cache/fallback для shell state.
|
||||
|
||||
## 6. Порядок интеграции
|
||||
|
||||
|
||||
Reference in New Issue
Block a user