Джина Гайд

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 — Полный путь жалобы в одно ведомство

Подробности и данные: acceptance/scenarios/scn-pos-001.json.

Scenario: SCN-POS-011 — Чужой заявитель

Подробности и данные: 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 — Полный путь жалобы в одно ведомство

Подробности и данные: acceptance/scenarios/scn-pos-001.json.

Scenario: SCN-POS-003 — Повтор и конфликт ключа

Подробности и данные: acceptance/scenarios/scn-pos-003.json.