temporality
Изменить страницу↗
Инженерные документы

План работ: Оргструктура и модель доступа

Source spec: docs/org-structure.md (расширенная версия, 55 разделов / 8 фаз). Статус: Волны A–G завершены (A — UI организации и доступности; B — явное членство в проектах + аудит доступа; C — роли на узлах, авторизация ранов, execution identity, snapshot контекста; D — триггеры на узлах и запуск под identity; E — human_request как сущность, резолюция получателя, timeout-политики; F — org-политики с рестриктивным merge и enforcement; G — отчёт расхождения, удаление legacy-колонок, документация модели доступа). Отложенные хвосты: UI ролей на узлах и execution identities, внешние пользователи, provider credentials. Порядок волн согласован с фазами спеки; UI организации был вынесен вперёд (волна A), потому что бэкенд фаз 1–2 уже существовал и без UI неюзабелен.

Размеры задач: S / M / L — относительно одной волны работы.

#0. Текущее состояние (baseline после 0e1ec70)

Готово (Фаза 1 спеки + часть Фазы 2):

Уже существовало в системе до оргструктуры (релевантно фазам 4–5):

Известные пробелы против расширенной спеки:

#1. Карта фаз спеки → волны плана

Фаза спеки Содержание Состояние Волна
1 Org Model дерево, path, CRUD, привязки, visibility-тесты ✅ готово —
2 Project Model project↔units, members, project roles, миграция ✅ готово (units + members + аудит) B
3 Authorization visibility/use/manage/administer, проверки на операциях, execution identity ✅ готово (provider credentials отложены до secret store) C
4 Triggers scope триггеров, авторизация, запуск под identity, аудит ✅ готово (org_unit_id + авторизация + re-auth + запуск под identity + аудит + UI) D
5 HITL human_request, recipient resolution, каналы, timeout-политики ✅ готово (сущность + резолюция + политики + аудит + UI-инбокс) E
6 Policies наследуемые политики выполнения ✅ готово (сущность + рестриктивный merge + enforcement в workflow и kernel + UI) F
7 UI Org Tree, доступность, membership, identity, политики Org Tree/доступность/membership/политики готово; identity — select в форме триггера, полный UI отложен A + B + F (готово); хвосты — ниже
8 Migration & Cleanup расхождение моделей, удаление legacy ✅ готово (отчёт scripts/access-divergence.sql, миграция 000043, runbook §11) G

#2. Волны работ

#Волна A. UI организации и доступности — M — фаза 7 (частично)

#Волна B. Project Model — M — фаза 2

#Волна C. Authorization — L — фаза 3

#Волна D. Triggers — M — фаза 4

#Волна E. HITL — M — фаза 5

#Волна F. Policies — M/L — фаза 6

#Волна G. Migration & Cleanup — S — фаза 8

#3. Тестирование и приёмка (по §51 спеки)

#4. Принятые решения

  1. Переходная видимость = org AND legacy (до волны B): обе модели должны пропустить; без настройки структуры поведение не меняется. В волне B заменяется на org OR explicit membership, legacy замораживается.
  2. Пересчёт path — в приложении, одной транзакцией MoveOrgUnit, без PL/pgSQL-триггеров.
  3. Мутации дерева и привязок — только admin (изменение видимости для всех); writer создаёт ресурсы с доступностью «вся организация».
  4. VisibleUnits = nil у служебных токенов — рантайм не зависит от прав пользователя; privileged API не используется для обхода авторизаций пользовательского API (§41).
  5. Только аддитивная модель (§7): без deny/override/исключений поддеревьев — зафиксировано как ограничение первой версии.
  6. Видимость ≠ полномочия (§10): фильтрация списков — это visibility; use/manage/administer появляются в волне C на уровне операций.
  7. Trigger ≠ пользователь (§19): автоматические Run — под execution identity с собственными правами.
  8. Org Unit у пользователя один (primary, §11–12): таблица дополнительных memberships — будущее расширение без переделки модели.

#5. Не-цели (первой версии, §54 спеки)