SECURITY: Защита критичных полей системных статусов от редактирования
Заблокировал изменение полей is_positive_end и is_negative_end для системных статусов заказов, так как эти флаги используются в сигналах inventory для управления резервированием и списанием товаров со склада. Что изменено: - OrderStatusForm: Добавлена блокировка (disabled=True) для полей is_positive_end и is_negative_end при редактировании системных статусов - status_form.html: Заменено информационное предупреждение на красное с детальным описанием заблокированных полей и их влияния на систему Почему это критично: Эти флаги проверяются в 3 сигналах inventory/signals.py: 1. rollback_sale_on_status_change - откатывает продажи при уходе от 'completed' 2. release_reservations_on_cancellation - освобождает резервы при отмене 3. reserve_stock_on_uncancellation - резервирует при восстановлении заказа Случайное изменение флагов может привести к: - Неправильному освобождению резервов товара - Двойному резервированию - Блокировке товара навсегда - Списанию товара для отмененных заказов Разрешено редактировать для системных статусов: name, label, color, description 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -420,6 +420,17 @@ class OrderStatusForm(forms.ModelForm):
|
||||
self.fields['code'].widget.attrs['readonly'] = True
|
||||
self.fields['code'].help_text = "Код системного статуса нельзя менять"
|
||||
|
||||
# КРИТИЧНО: Блокируем изменение флагов is_positive_end и is_negative_end
|
||||
# Эти флаги используются в сигналах для управления резервами и списаниями
|
||||
# Изменение может привести к:
|
||||
# - Неправильному освобождению резервов
|
||||
# - Двойному резервированию товара
|
||||
# - Блокировке товара навсегда
|
||||
self.fields['is_positive_end'].disabled = True
|
||||
self.fields['is_negative_end'].disabled = True
|
||||
self.fields['is_positive_end'].help_text = "Нельзя изменять для системных статусов (влияет на резервирование)"
|
||||
self.fields['is_negative_end'].help_text = "Нельзя изменять для системных статусов (влияет на резервирование)"
|
||||
|
||||
|
||||
# === ВРЕМЕННЫЕ КОМПЛЕКТЫ ===
|
||||
|
||||
|
||||
@@ -15,8 +15,14 @@
|
||||
{% endif %}
|
||||
</h1>
|
||||
{% if is_system %}
|
||||
<div class="alert alert-info mt-2">
|
||||
<i class="fas fa-info-circle"></i> Это системный статус. Некоторые поля не могут быть изменены.
|
||||
<div class="alert alert-danger mt-2">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<strong>ВНИМАНИЕ!</strong> Это системный статус, используемый в бизнес-логике системы.
|
||||
<ul class="mb-0 mt-2">
|
||||
<li><strong>Код статуса</strong> — заблокирован (используется в коде для проверок)</li>
|
||||
<li><strong>Положительный/Отрицательный исход</strong> — заблокированы (управляют резервированием и списанием товаров со склада)</li>
|
||||
<li>Разрешено изменять: название, метку, цвет и описание</li>
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user