Fix: Use storage.url() for tenant-aware image URLs in frontend
Updated ImageService to use default_storage.url() instead of manually
constructing URLs. This ensures images displayed on the frontend correctly
include the tenant_id in the path, enabling proper file access within
multi-tenant environment.
Changes:
- ImageService.get_url() now delegates to default_storage.url()
- All image URLs now include /media/tenants/{tenant_id}/ path
- Ensures consistent behavior with TenantAwareFileSystemStorage
- Frontend photos now display correctly with tenant isolation
Result:
- Thumbnail URLs: /media/tenants/papa/products/4/28/thumb.webp
- Medium URLs: /media/tenants/papa/products/4/28/medium.webp
- Large URLs: /media/tenants/papa/products/4/28/large.webp
- Original URLs: /media/tenants/papa/products/4/28/original.jpg
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -41,6 +41,8 @@ Tenant ID добавляется/удаляется автоматически
|
||||
- `_get_tenant_path()` - Добавляет tenant_id в начало пути
|
||||
- `get_available_name()` - Проверяет уникальность на диске, но возвращает путь БЕЗ tenant_id для БД
|
||||
- `_save()` - Сохраняет файл с tenant_id на диск, но возвращает путь БЕЗ tenant_id для БД
|
||||
- `_open()` - Открывает файл, добавляя tenant_id если необходимо (критично для Celery!)
|
||||
- `path()` - Преобразует относительные пути в полные системные пути с tenant_id
|
||||
- `delete()` - Удаляет файлы с проверкой принадлежности тенанту (безопасность)
|
||||
- `exists()` - Проверяет существование с валидацией тенанта
|
||||
- `url()` - Генерирует URL с проверкой безопасности
|
||||
|
||||
@@ -88,9 +88,12 @@ class ImageService:
|
||||
# Преобразуем thumbnail в thumb
|
||||
final_size_name = ImageService._normalize_size_name(size)
|
||||
|
||||
# Создаем путь и возвращаем URL
|
||||
# Создаем путь и используем storage.url() для корректной работы с tenant-aware storage
|
||||
file_path = f"{base_path}/{entity_id}/{photo_id}/{final_size_name}.{extension}"
|
||||
return f"{settings.MEDIA_URL}{file_path}"
|
||||
|
||||
# Используем default_storage.url() для корректной работы с TenantAwareFileSystemStorage
|
||||
# Это гарантирует что URL будет содержать tenant_id если необходимо
|
||||
return default_storage.url(file_path)
|
||||
|
||||
except Exception:
|
||||
return ''
|
||||
|
||||
Reference in New Issue
Block a user