security Specification
Purpose
Разграничение доступа и аудит действий в системе «Обратная связь — регион».
Requirements
Requirement: REQ-SEC-001 — Изоляция заявителей
{
"id": "REQ-SEC-001",
"level": "REQ",
"status": "agreed",
"owner": "product-owner",
"parents": [
"HLR-POS-007"
],
"sources": [
"docs/models.md"
],
"questions": [],
"required_aspects": [
"owner",
"foreign"
],
"verification": "test",
"risk": "high"
}
Система MUST разрешать заявителю чтение жалобы, уточнение и чтение итогового ответа только при совпадении автора с идентификатором аутентифицированной сессии. Чужой идентификатор возвращает 404 без подтверждения существования записи, текста, вложений или статуса. Служебный доступ регулируется матрицей ролей отдельно.
Scenario: SCN-POS-001 — Полный путь жалобы в одно ведомство
- GIVEN Жалоба принята от автора; тестовый маршрут LIGHT-01 v7 действует
- WHEN Подтвердить категорию; назначить маршрут; подготовить и согласовать ответ; опубликовать итог; открыть его автором
- THEN Автор читает итог
Подробности и данные: acceptance/scenarios/scn-pos-001.json.
Scenario: SCN-POS-011 — Чужой заявитель
- GIVEN Жалоба принадлежит citizen-demo-001; сессия citizen-demo-002
- WHEN Прочитать жалобу и ответ; отправить уточнение
- THEN 404 без раскрытия существования и содержимого
Подробности и данные: acceptance/scenarios/scn-pos-011.json.
Requirement: REQ-SEC-002 — Аудит эффективных изменений
{
"id": "REQ-SEC-002",
"level": "REQ",
"status": "agreed",
"owner": "product-owner",
"parents": [
"HLR-POS-007"
],
"sources": [
"docs/models.md"
],
"questions": [],
"required_aspects": [
"recorded",
"deduplicated"
],
"verification": "test",
"risk": "high"
}
Система MUST записывать эффективные изменения регистрации, категории, маршрута, версии ответа и публикации с actor_id, временем UTC, complaint_id, типом действия, старой и новой версиями, correlation_id и хешем содержимого. Полный текст и секреты в журнал не включаются. Повтор идемпотентного запроса не создаёт вторую запись эффективного изменения; диагностические попытки могут учитываться отдельно.
Scenario: SCN-POS-001 — Полный путь жалобы в одно ведомство
- GIVEN Жалоба принята от автора; тестовый маршрут LIGHT-01 v7 действует
- WHEN Подтвердить категорию; назначить маршрут; подготовить и согласовать ответ; опубликовать итог; открыть его автором
- THEN Существенные изменения записаны без полного текста
Подробности и данные: acceptance/scenarios/scn-pos-001.json.
Scenario: SCN-POS-003 — Повтор и конфликт ключа
- GIVEN Первый запрос с базовым текстом уже принят; прошло менее24 ч
- WHEN Повторить отправку с прежним ключом
- THEN Тот же результат; одна жалоба и одна эффективная запись регистрации
Подробности и данные: acceptance/scenarios/scn-pos-003.json.