NODEDC_PLATFORM/docs/ARCHITECTURE.md

110 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Architecture: NODE.DC Multi-App Platform
## Цель
Собрать единую платформенную основу для Launcher, Task Manager / Plane и будущих приложений NODE.DC.
Целевой пользовательский сценарий:
1. Пользователь открывает Launcher.
2. Если сессии нет, его отправляет в Authentik.
3. После логина Launcher получает identity и app access.
4. Launcher показывает только доступные приложения.
5. Переход в Task Manager не требует повторного логина.
6. Прямой URL Task Manager тоже защищен.
## Роли компонентов
`Authentik` является единым Identity Provider:
- логин;
- пароль;
- активность пользователя;
- группы;
- app access;
- OIDC claims;
- будущие invite/enrollment/MFA flows.
`Launcher` является control plane:
- входная точка пользователя;
- список доступных приложений;
- admin UI управления пользователями и доступами;
- backend-интеграция с Authentik API;
- audit log админских действий.
`Task Manager / Plane` остается отдельным приложением:
- собственная БД;
- собственные workspace/project/task/comment модели;
- собственные роли workspace/project;
- OIDC login через Authentik;
- mapping внешней identity на существующего Plane user.
`Reverse proxy` является внешним защитным и маршрутизирующим слоем:
- единая точка входа;
- HTTPS в staging/production;
- routing по app domain;
- forward headers для Authentik;
- deny для пользователей без app access.
## Repository layout
Рабочая схема:
```text
NODEDC/
DOC/
platform/
docs/
infra/
packages/
tasks/
/Users/dcconstructions/Downloads/mnt/data/nodedc_launcher
/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER
```
`platform/` не забирает исходники Launcher и Plane внутрь себя. Он хранит только платформенный слой и договоренности между приложениями.
## Data ownership
Не создается единая общая таблица `users` для всех приложений.
Логическая схема:
```text
authentik_db -> identity, groups, app access
launcher_db -> app registry, local profiles, audit
plane_db -> workspace, projects, tasks, comments, app roles
future_app_db -> доменная логика будущих приложений
```
Связь между identity и локальными пользователями выполняется через explicit mapping, а не через прямое чтение чужих таблиц.
## Auth flow
Для приложений, которые контролируются кодом:
- OIDC Authorization Code Flow + PKCE;
- backend/session или BFF layer;
- JWT/JWKS validation server-side;
- проверка `issuer`, `audience`, `exp`, `sub`;
- проверка app access group;
- локальный user profile или external identity link.
Для legacy/временных приложений допускается reverse proxy forward-auth, но это временный внешний слой, а не единственная долгосрочная модель.
## Plane migration rule
Существующий Plane user нельзя пересоздавать.
Нужен mapping:
```text
authentik_user.sub -> existing plane_user.id
```
Plane должен логинить существующего пользователя по link, сохраняя все старые workspace, assignee, owner, created_by, comments и attachments.