Files
selfpost/docs/plans/domain-admin.md
T
mixeme 870012514a docs: recommend web-split before domain-admin and inbound-relay
Document the preferred implementation order in the roadmap and linked plans.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-09 13:17:54 +03:00

67 lines
3.8 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.
# План: domain-admin (роль администратора домена)
**Статус:** согласовано
**Версия:** целевой bump **1.x** MINOR при совместимой миграции текущего админа
в глобального.
**Порядок:** рекомендуется после [web-split](web-split.md), до
[inbound-relay](inbound-relay.md).
---
## Что это
Сейчас в панели ровно один субъект: `requireAuth` — булев гейт, а не роль
([web.go](../../internal/web/web.go) — обёртка
`mux.Handle("/", s.requireAuth(authed))`), сессия не несёт ничего, кроме факта
входа.
Роль выдаёт доступ к **одному домену** и только к нему:
- приложения этого домена (создание, режим отправителя, перегенерация пароля,
удаление, свой L2-лимит);
- DKIM/DNS-статус домена;
- журнал отправки, отфильтрованный по домену — фильтр в журнале уже есть
([sendLogData](../../internal/web/handlers_monitor.go)).
Вне роли остаётся то, что глобально по своей природе:
- добавление и удаление доменов;
- `/reload`;
- полный бэкап (это весь `/data` вместе с `sasldb2`, то есть все домены
сразу);
- очередь и хвост `mail.log` — они серверные и к домену не привязаны.
## Почему расширение v1.0
[product.md](../product.md) относит «несколько пользователей панели, роли» к
out of scope (один администратор). Появление второго субъекта — сознательное
расширение границ проекта, как и inbound-relay.
Цена — уровня фазы, а не патча:
- таблица пользователей и их привязка к доменам;
- роль в сессии;
- авторизация в каждом хендлере (а не только на маршруте — сейчас `{id}`/`{aid}`
не сверяются ни с чем, кроме существования);
- пересмотр первичного setup'а и смены пароля под нескольких пользователей;
- учёт нового субъекта в бэкапе и экспорте домена.
*(Прежняя формулировка этого пункта — «2FA и несколько администраторов» —
заменена: 2FA снята с рассмотрения, а «несколько администраторов» уточнено до
одной конкретной роли, потому что нужна не вторая копия всевластного админа, а
ограниченный доступ владельца отдельного домена.)*
## Готово, когда
- Глобальный администратор и domain-admin с разными правами работают через
панель; domain-admin не может выйти за пределы своего домена;
- текущий единственный админ мигрирует в глобального без потери доступа;
- бэкап/восстановление учитывает пользователей и привязки;
- `build`/`vet`/`test`/образ зелёные.
## Риски
- Неполная проверка `{id}`/`{aid}` в хендлерах — утечка доступа к чужому
домену;
- breaking setup/бэкап — тогда semver major, не 1.x.