Создание root-пользователя

Команда create_root создает пользователя с корневыми правами в локальной базе. Она рассчитана на standalone-сценарий и опирается на уже существующий сервисный эктор и системные группы.

Команда

uv run manage.py create_root

Используйте команду после create_service, когда сервис должен администрироваться локально. Команда не поднимает пользователя из воздуха: ей нужны и таблицы, и сервисные ключи, и группа по умолчанию.

По умолчанию: Команда запускается в базовом режиме создания root-пользователя и запрашивает недостающие значения при запуске.

Параметры

Параметр Описание
--first_name, -fn Имя пользователя. При отсутствии будет запрошено интерактивно.
--last_name, -ln Фамилия пользователя. При отсутствии будет запрошена интерактивно.
--email, -e Email root-пользователя. Адрес проходит валидацию через email_validator и должен быть уникальным в таблице actor.
--password, -p Пароль пользователя. Если флаг не передан, команда спросит пароль дважды через getpass.

Дополнительные примеры запуска

Полностью неинтерактивный запуск

uv run manage.py create_root \
  --first_name "Root" \
  --last_name "Admin" \
  --email "[email protected]" \
  --password "change-me"

Подходит для автоматизации и сценариев, где параметры передаются сразу при запуске команды.

Как работает

  1. Проверяет наличие таблицы actor, затем валидирует email и убеждается, что такого пользователя еще нет.
  2. Если пароль не передан, запрашивает его дважды и сравнивает введенные значения.
  3. Получает UUID группы по умолчанию из таблицы actor, хеширует пароль и генерирует ключевую пару для нового пользователя.
  4. Подписывает связку root_uuid + public_key сервисным приватным ключом и вставляет новую запись типа classic_user в базу.

Что важно учесть

  • Команда ожидает, что в базе уже существует группа DEFAULT. Обычно она появляется после create_service в standalone-режиме.
  • Для подписи root-пользователя должен быть настроен SERVICE_PRIVATE_KEY в конфигурации сервиса.
  • Если нужной группы нет, команда падает не на этапе валидации CLI, а уже во время чтения из базы.