feat: Добавлен флаг is_superuser для platform_support и сохранение credentials в файл
- Platform support пользователь теперь создается с is_superuser=True для полного доступа - Добавлено сохранение credentials (домен:логин:пароль) в support_credentials.txt - Добавлен support_credentials.txt в .gitignore для безопасности - Обновлена документация развертывания на NAS Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
3
myproject/.gitignore
vendored
3
myproject/.gitignore
vendored
@@ -11,6 +11,9 @@ db.sqlite3-journal
|
|||||||
.env
|
.env
|
||||||
docker/.env.docker
|
docker/.env.docker
|
||||||
|
|
||||||
|
# Support credentials (generated passwords)
|
||||||
|
support_credentials.txt
|
||||||
|
|
||||||
# Virtual environment
|
# Virtual environment
|
||||||
venv/
|
venv/
|
||||||
env/
|
env/
|
||||||
|
|||||||
@@ -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/media
|
||||||
chown -R 1000:1000 /Volume1/DockerAppsData/mixapp/static
|
chown -R 1000:1000 /Volume1/DockerAppsData/mixapp/static
|
||||||
chmod -R u+rwX /Volume1/DockerAppsData/mixapp
|
chmod -R u+rwX /Volume1/DockerAppsData/mixapp
|
||||||
|
chown -R 1000:1000 /Volume1/DockerYAML/mix
|
||||||
```
|
```
|
||||||
|
|
||||||
## Шаг 2: Копирование файлов проекта на NAS
|
## Шаг 2: Копирование файлов проекта на NAS
|
||||||
@@ -78,10 +79,9 @@ nano .env.docker
|
|||||||
# Django settings
|
# Django settings
|
||||||
SECRET_KEY=ваш-очень-длинный-секретный-ключ-минимум-50-символов
|
SECRET_KEY=ваш-очень-длинный-секретный-ключ-минимум-50-символов
|
||||||
DEBUG=False
|
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
|
CSRF_TRUSTED_ORIGINS=https://mix.smaa.by,https://*.mix.smaa.by
|
||||||
DOMAIN_NAME=mix.smaa.by
|
DOMAIN_NAME=mix.smaa.by
|
||||||
|
|
||||||
# Database (PostgreSQL)
|
# Database (PostgreSQL)
|
||||||
DB_NAME=inventory_db
|
DB_NAME=inventory_db
|
||||||
DB_USER=postgres
|
DB_USER=postgres
|
||||||
|
|||||||
@@ -279,6 +279,7 @@ class TenantOnboardingService:
|
|||||||
support_user.is_email_confirmed = True
|
support_user.is_email_confirmed = True
|
||||||
support_user.email_confirmed_at = timezone.now()
|
support_user.email_confirmed_at = timezone.now()
|
||||||
support_user.is_active = True
|
support_user.is_active = True
|
||||||
|
support_user.is_superuser = True
|
||||||
support_user.save()
|
support_user.save()
|
||||||
|
|
||||||
# Назначаем роль platform_support
|
# Назначаем роль platform_support
|
||||||
@@ -290,6 +291,38 @@ class TenantOnboardingService:
|
|||||||
f"Email: {support_email} | Пароль: {password}"
|
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
|
@classmethod
|
||||||
def _init_tenant_data(cls):
|
def _init_tenant_data(cls):
|
||||||
"""Инициализация системных данных тенанта."""
|
"""Инициализация системных данных тенанта."""
|
||||||
|
|||||||
Reference in New Issue
Block a user