Files
selfpost/docs/plans/domain-admin.md
T
mixeme 44683a4996 docs: domain-admin may cover multiple assigned domains
Clarify that the global administrator sets which domains a domain-admin can manage.

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

4.2 KiB
Raw Blame History

План: domain-admin (роль администратора домена)

Статус: согласовано
Версия: целевой bump 1.x MINOR при совместимой миграции текущего админа в глобального.
Порядок: рекомендуется после web-split, до inbound-relay.


Что это

Сейчас в панели ровно один субъект: requireAuth — булев гейт, а не роль (web.go — обёртка mux.Handle("/", s.requireAuth(authed))), сессия не несёт ничего, кроме факта входа.

Роль выдаёт доступ к явно назначенным доменам (одному или нескольким); перечень доменов определяет глобальный администратор. Для каждого домена из списка:

  • приложения этого домена (создание, режим отправителя, перегенерация пароля, удаление, свой L2-лимит);
  • DKIM/DNS-статус домена;
  • журнал отправки, отфильтрованный по домену — фильтр в журнале уже есть (sendLogData).

Вне роли остаётся то, что глобально по своей природе:

  • добавление и удаление доменов;
  • создание domain-admin пользователей и назначение им доменов;
  • /reload;
  • полный бэкап (это весь /data вместе с sasldb2, то есть все домены сразу);
  • очередь и хвост mail.log — они серверные и к домену не привязаны.

Почему расширение v1.0

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.