NODEDC_PLATFORM/docs/ARCHITECTURE.md

133 lines
6.8 KiB
Markdown
Raw Permalink 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. Если сессии нет, его отправляет в платформенный login flow без публичного брендинга Authentik.
3. После логина Launcher получает identity, профиль и access projection.
4. Launcher показывает каталог приложений и состояние доступа.
5. Переход в Task Manager не требует повторного логина.
6. Прямой URL Task Manager тоже защищен.
## Роли компонентов
`Authentik` является внутренним Identity Provider / SSO layer:
- логин;
- пароль;
- активность identity;
- технические SSO-группы/entitlements;
- OIDC app access projection;
- OIDC claims;
- будущие enrollment/MFA flows, вызываемые из Launcher.
Authentik не является пользовательским control plane и не должен быть видим обычным пользователям/админам в штатном UI.
Hosted Authentik login используется только как временный dev flow. Production-вход должен быть NODE.DC-branded login facade или полностью приведенный к NODE.DC UX Authentik flow без публичного упоминания Authentik.
`Launcher` является control plane:
- входная точка пользователя;
- витрина всех приложений и состояния доступа;
- admin UI управления клиентами, пользователями, группами, инвайтами и доступами;
- мастер-данные пользователей и профиль платформы;
- backend-интеграция с Authentik API как внутренняя sync/projection;
- audit log админских действий.
`Task Manager / Plane` остается отдельным приложением:
- собственная БД;
- собственные workspace/project/task/comment модели;
- собственные роли workspace/project;
- OIDC login через Authentik;
- mapping внешней identity на существующего Plane user;
- возможность работать standalone вне NODE.DC stack при сохранении стандартных Plane auth/API механизмов.
`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
launcher_db -> clients, users, memberships, groups, invites, app registry, access model, profiles, audit
authentik_db -> identity/session/OIDC projection from Launcher
plane_db -> workspace, projects, tasks, comments, app roles
future_app_db -> доменная логика будущих приложений
```
Связь между identity и локальными пользователями выполняется через explicit mapping, а не через прямое чтение чужих таблиц.
Launcher является источником бизнес-пользователя. Authentik хранит техническую identity, необходимую для SSO, но не заменяет Launcher в администрировании клиентов, команд, доступов и профиля.
## App standalone rule
Подключаемые приложения не должны становиться невынимаемыми частями NODE.DC.
Для Plane это означает:
- NODE.DC интеграция добавляется как адаптерный слой: OIDC provider, external identity link, app access projection и будущий service adapter;
- доменные таблицы Plane не становятся частью Launcher DB;
- Launcher не читает и не пишет Plane DB напрямую;
- управление workspace/project/task/comment остается внутри Plane;
- интеграция с Plane выполняется через публичные Plane API, API tokens или явно выделенные adapter endpoints;
- стандартные Plane auth/API механизмы не удаляются без отдельного решения, чтобы можно было поставить Plane клиенту standalone.
Если клиенту нужен только Task Manager, целевая поставка должна позволять развернуть Plane отдельно, отключить NODE.DC Launcher/Auth projection и оставить штатную модель Plane.
## Auth flow
Для приложений, которые контролируются кодом:
- OIDC Authorization Code Flow + PKCE;
- backend/session или BFF layer;
- JWT/JWKS validation server-side;
- проверка `issuer`, `audience`, `exp`, `sub`;
- проверка app access projection group/entitlement;
- локальный 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.