АРХ - NODEDC PLATFORM: каркас платформенного репозитория

This commit is contained in:
Codex
2026-05-04 10:02:18 +03:00
commit 0f89c4d126
12 changed files with 755 additions and 0 deletions
+108
View File
@@ -0,0 +1,108 @@
# Plane User Migration Plan
## Цель
Связать существующего пользователя Plane с Authentik identity без потери workspace, projects, tasks, comments, attachments и истории.
## Current baseline
Текущий рабочий Plane workspace:
```text
workspace slug: nodedc
workspace name: NODE DC
workspace owner: dcctouch@gmail.com
codex user: codex@nodedc.local
```
Перед реализацией OIDC нужно дополнительно снять точный snapshot:
- users;
- profiles;
- workspace memberships;
- project memberships;
- issue ownership;
- issue assignees;
- comments;
- attachments;
- uploaded files/storage.
## Backup before changes
Перед любыми изменениями Plane auth:
```text
plane_db dump
plane-app/plane.env
uploads / MinIO volumes
redis, если в нем есть важные очереди/сессии
rabbitmq, если есть невыполненные jobs
```
## Mapping model
Минимальная модель:
```text
external_identity_link
id
provider = authentik
authentik_sub
email
plane_user_id
created_at
last_login_at
status
```
Уникальность:
- `provider + authentik_sub`;
- `provider + plane_user_id`;
- желательно `provider + email`, если email используется для migration auto-link.
## Login flow
```text
Authentik login
-> Plane OIDC callback
-> validate state/nonce/token
-> validate issuer/audience/exp/sub
-> check nodedc:taskmanager:access
-> find external_identity_link by authentik_sub
-> login existing plane_user_id
```
Migration auto-link допускается только контролируемо:
```text
if no link and email matches existing Plane user and migration mode enabled:
create external_identity_link
else:
deny or provisioning flow
```
## Forbidden during migration
- Не пересоздавать существующего Plane user.
- Не менять `created_by`.
- Не менять `owner_id`.
- Не менять `assignee_id`.
- Не менять `member_id`.
- Не делать bulk update связей задач без отдельной проверки.
## Management command target
Целевая команда:
```bash
python manage.py link_authentik_user --email admin@example.ru --sub <authentik-sub>
```
Требования:
- idempotent;
- проверяет конфликтующий mapping;
- ничего не меняет в задачах/workspace;
- выводит summary;
- поддерживает dry-run.