# План: domain-admin (роль администратора домена) **Статус:** согласовано **Версия:** целевой bump **1.x** MINOR при совместимой миграции текущего админа в глобального. --- ## Что это Сейчас в панели ровно один субъект: `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.