From 0bddbc08c49c0a828b126249b6a1dc5495887616 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Fri, 9 Jan 2026 00:02:10 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=84=D0=BB=D0=B0=D0=B3=20is=5Fsuperuser=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20platform=5Fsupport=20=D0=B8=20=D1=81=D0=BE?= =?UTF-8?q?=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20credentials?= =?UTF-8?q?=20=D0=B2=20=D1=84=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Platform support пользователь теперь создается с is_superuser=True для полного доступа - Добавлено сохранение credentials (домен:логин:пароль) в support_credentials.txt - Добавлен support_credentials.txt в .gitignore для безопасности - Обновлена документация развертывания на NAS Co-Authored-By: Claude Sonnet 4.5 --- myproject/.gitignore | 3 +++ myproject/docker/DEPLOY_NAS.md | 4 +-- myproject/tenants/services/onboarding.py | 33 ++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/myproject/.gitignore b/myproject/.gitignore index 0c3d379..b99a345 100644 --- a/myproject/.gitignore +++ b/myproject/.gitignore @@ -11,6 +11,9 @@ db.sqlite3-journal .env docker/.env.docker +# Support credentials (generated passwords) +support_credentials.txt + # Virtual environment venv/ env/ diff --git a/myproject/docker/DEPLOY_NAS.md b/myproject/docker/DEPLOY_NAS.md index d8a65f2..8da0305 100644 --- a/myproject/docker/DEPLOY_NAS.md +++ b/myproject/docker/DEPLOY_NAS.md @@ -41,6 +41,7 @@ chown -R 1000:1000 /Volume1/DockerAppsData/mixapp/app chown -R 1000:1000 /Volume1/DockerAppsData/mixapp/media chown -R 1000:1000 /Volume1/DockerAppsData/mixapp/static chmod -R u+rwX /Volume1/DockerAppsData/mixapp +chown -R 1000:1000 /Volume1/DockerYAML/mix ``` ## Шаг 2: Копирование файлов проекта на NAS @@ -78,10 +79,9 @@ nano .env.docker # Django settings SECRET_KEY=ваш-очень-длинный-секретный-ключ-минимум-50-символов DEBUG=False -ALLOWED_HOSTS=mix.smaa.by,*.mix.smaa.by,localhost,127.0.0.1 +ALLOWED_HOSTS=* CSRF_TRUSTED_ORIGINS=https://mix.smaa.by,https://*.mix.smaa.by DOMAIN_NAME=mix.smaa.by - # Database (PostgreSQL) DB_NAME=inventory_db DB_USER=postgres diff --git a/myproject/tenants/services/onboarding.py b/myproject/tenants/services/onboarding.py index 8478925..acdff53 100644 --- a/myproject/tenants/services/onboarding.py +++ b/myproject/tenants/services/onboarding.py @@ -279,6 +279,7 @@ class TenantOnboardingService: support_user.is_email_confirmed = True support_user.email_confirmed_at = timezone.now() support_user.is_active = True + support_user.is_superuser = True support_user.save() # Назначаем роль platform_support @@ -290,6 +291,38 @@ class TenantOnboardingService: f"Email: {support_email} | Пароль: {password}" ) + # Сохраняем credentials в файл + cls._save_support_credentials(registration, support_email, password) + + @classmethod + def _save_support_credentials(cls, registration: TenantRegistration, email: str, password: str): + """ + Сохраняет credentials техподдержки в файл. + + Формат: домен:логин:пароль + Файл: support_credentials.txt в корне проекта + """ + import os + from pathlib import Path + + # Корень проекта (где manage.py) + project_root = Path(settings.BASE_DIR) + credentials_file = project_root / 'support_credentials.txt' + + # Формируем домен тенанта + domain_base = settings.TENANT_DOMAIN_BASE + if ':' in domain_base: + domain_base = domain_base.split(':')[0] + tenant_domain = f"{registration.schema_name}.{domain_base}" + + # Добавляем строку в файл + try: + with open(credentials_file, 'a', encoding='utf-8') as f: + f.write(f"{tenant_domain}:{email}:{password}\n") + logger.info(f"Credentials сохранены в {credentials_file}") + except Exception as e: + logger.error(f"Ошибка сохранения credentials: {e}") + @classmethod def _init_tenant_data(cls): """Инициализация системных данных тенанта."""