Document the preferred implementation order in the roadmap and linked plans. Co-authored-by: Cursor <cursoragent@cursor.com>
3.8 KiB
План: domain-admin (роль администратора домена)
Статус: согласовано
Версия: целевой bump 1.x MINOR при совместимой миграции текущего админа
в глобального.
Порядок: рекомендуется после web-split, до
inbound-relay.
Что это
Сейчас в панели ровно один субъект: requireAuth — булев гейт, а не роль
(web.go — обёртка
mux.Handle("/", s.requireAuth(authed))), сессия не несёт ничего, кроме факта
входа.
Роль выдаёт доступ к одному домену и только к нему:
- приложения этого домена (создание, режим отправителя, перегенерация пароля, удаление, свой L2-лимит);
- DKIM/DNS-статус домена;
- журнал отправки, отфильтрованный по домену — фильтр в журнале уже есть (sendLogData).
Вне роли остаётся то, что глобально по своей природе:
- добавление и удаление доменов;
/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.