ADR-006: Группы доступа; цепочка — свойство инбаунда
Status: Accepted · Date: 2026-07-03
Контекст
Section titled “Контекст”Нужно определять, какие точки входа доступны подписке, включая мультихоп-цепочки. Предыдущая модель: users.node_template_id XOR users.chain_id — обычный клиент привязан к привязке шаблона, мультихоп-клиент — к цепочке; два взаимоисключающих nullable-FK с CHECK-ограничением.
Решение
Section titled “Решение”Доступ выдаётся только через группы: подписка → группа доступа → набор инбаундов. Мультихоп — свойство инбаунда (inbounds.chain_id): весь трафик entry-инбаунда уходит в цепочку. Подписки и группы о цепочках не знают. См. Клиенты и подписки, Мультихоп.
Отклонённые альтернативы
Section titled “Отклонённые альтернативы”XOR-привязка клиента — специальный случай в каждом запросе и в каждом рендере; «переместить клиента на другую ноду» — мутация FK; мультихоп-тариф на несколько entry невыразим.
Копирование набора инбаундов в подписку при покупке — изменение доступа (добавили ноду) не доходит до проданных подписок без массовой правки.
Последствия
Section titled “Последствия”- (+) Один механизм для соло-нод, мультихопа и любых будущих топологий; «тариф» и «доступ» ортогональны.
- (+) Условия сделки (лимит, срок) снапшотятся в подписку, состав доступа — живой через группу; граница между «копируется» и «ссылается» проведена по смыслу.
- (−) Ещё одна сущность в модели и UI. Оправдано отсутствием специальных случаев ниже по стеку.