8.5 KiB
8.5 KiB
ТЗ-плюс — уточнения и дополнения от заказчика
Основа:
docs/ТЗ.md
Файл для фиксации уточнений, дополнений и решений по мере обсуждения с заказчиком/DevOps.
Каждая запись = дата + источник + формулировка + статус.
1. Аутентификация и Keycloak
1.1. client_id приложения в Keycloak
- Дата: 2026-06-02
- Источник: HAR
Files/nubes_login.har - Факт:
client_id = deck-test.ngcloud.ru(в URL auth-запроса) - Статус: 🔴 требует подтверждения — этот ли client_id для ipwhitelist, или будет отдельный?
1.2. ClientID в JWT — УТОЧНЕНО
- ТЗ: claim
ClientID— идентификатор компании - Факт (HAR):
ClientID: "WZ01325", нет массива - Факт (token.txt):
ClientIDотсутствует, вместо негоclaims[]с названиями namespace'ов - Уточнение заказчика (01.06.2026): в claims приходит
clientid. Формат может быть разный.- Одно значение:
WZ04228,1700,asokolov-test - Несколько через запятую:
WZ11125, WZ03816,WZ52235, WZ62587, WZ02315 - Логика: первое «слово» до запятой определяет общий ЛК. Пользователи с одинаковым первым словом → общий whitelist.
- Одно значение:
- Что делать в коде: брать первый
clientidдо запятой как активную компанию. Остальные (если есть) — дополнительные компании пользователя для переключателя. - Статус: 🟡 уточнено, требует реализации в коде
1.3. Несколько компаний на пользователя — УТОЧНЕНО
- ТЗ, п.3.1: «поддерживается сценарий, когда пользователь принадлежит нескольким компаниям»
- Уточнение заказчика (01.06.2026): поле
clientidв claims содержит список через запятую. Примеры:WZ11125, WZ03816,WZ52235, WZ62587, WZ02315. - Логика ЛК: первое значение до запятой — активная компания.
Пользователи с одинаковым первым
clientidвидят общий whitelist. Переключатель между компаниями — все значения из списка. - Открытый вопрос: какое именно поле в Keycloak за это отвечает? Заказчик уточнит.
- Статус: 🟡 уточнено, требует реализации в коде
1.4. Admin-роль в Keycloak
- ТЗ: admin =
ClientID = WZ01112+ отдельный чек-бокс - Вопрос: чек-бокс — это claim? Какой?
is_admin,realm_access.roles,groups? - Статус: 🔴
1.5. JWKS URL
- Вариант A:
https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/certs - Вариант B:
https://auth-api...(через API Gateway) - Статус: 🔴
1.6. Redirect URI
- Предложение:
https://white.nodejsk8s.dev.nubes.ru/callback - Статус: 🔴 требует подтверждения DevOps
2. Инфраструктура и деплой
2.1. Платформа
- Статус: 🔴 уточнить — Node.js на k8s? Какой кластер?
2.2. Деплой
- Статус: 🔴 уточнить — CI/CD? Как поставлять
jsonEnv?
2.3. Сетевое ограничение для /export
- Вопрос: какие IP/подсети будут потребителями внешней выдачи?
- Статус: 🔴
3. Функциональные уточнения
3.1. Мульти-компания в UI
- ТЗ, п.3.1: «переключатель активной компании»
- Вопрос: дизайн переключателя? Dropdown в шапке? Отдельная страница?
- Статус: 🔴
3.2. Soft-delete и фильтр «показать удалённые»
- ТЗ, п.4.1: «для администратора предусмотрен фильтр»
- Код:
includeDeletedвсегдаfalse - Статус: 🟡 не реализовано в коде
3.3. Индивидуальные лимиты компаний
- ТЗ, п.4.5: админ может задать индивидуальный лимит
- Код: ?
- Статус: 🔴 проверить реализацию
3.4. Уведомление о нормализации
- ТЗ, п.5: «пользователь должен быть уведомлен, что ввел адрес из хостовой части»
- Статус: 🔴 проверить реализацию в UI
4. Тестовые данные
4.1. Тестовые пользователи
| ClientID | Компания | Роль | |
|---|---|---|---|
tazet@narod.ru |
WZ01325 |
Тест | Клиент |
admin@nubes.ru |
WZ01112 |
Нубес | Админ |
tazetdinovn@gmail.com |
? | ? | ? (из token.txt) |
4.2. HAR-сессия
- Файл:
Files/nubes_login.har - Пользователь:
tazet@narod.ru - Дата: 2026-05-30
- Окружение: deck-test
6. Уточнения от заказчика (01.06.2026)
6.1. Формат clientid в токене
- Поле:
clientidв claims JWT - Формат: строка, значения через запятую если несколько
- Примеры:
"WZ04228"— одна компания"1700"— числовой ID"asokolov-test"— текстовый ID"WZ11125, WZ03816"— две компании"WZ52235, WZ62587, WZ02315"— три компании
- Правило: первое «слово» до запятой = активная компания (определяет ЛК)
- Общий доступ: пользователи с одинаковым первым словом имеют общий whitelist
6.2. Экспорт — подтверждение формата
- GET-endpoint отдаёт txt файл
- Одна строка = один объект (адрес/подсеть)
- Без разделителей, без заголовков
6.3. Текущее демо — одобрено
https://white.nodejsk8s.dev.nubes.ru/login— ✓https://white.nodejsk8s.dev.nubes.ru/exp— ✓ (вывод без токена для тестирования)
6.4. Что ещё уточняется
- Какое именно поле Keycloak маппится в
clientidclaim? (Заказчик уточнит) - Как определяется admin-роль? (отдельный чек-бокс в Keycloak?)
client_idиclient_secretдля регистрации приложения
6.5. Права внутри компании — уточнено (02.06.2026)
- Вопрос: может ли любой юзер компании редактировать whitelist всей компании?
- Ответ заказчика: «Да, любой юзер, который может войти может редактировать»
- Вывод: внутри компании роли не разграничиваются. Любой сотрудник компании имеет полный доступ к whitelist своей компании (создание, редактирование, удаление). Аудит фиксирует кто именно сделал изменение.
5. Решения и договорённости
Сюда записывать принятые решения с датой и контекстом.
(пока пусто)
Легенда статусов
| Статус | Значение |
|---|---|
| 🔴 | Требует уточнения |
| 🟡 | Уточнено, не реализовано |
| 🟢 | Реализовано / подтверждено |
| ⚫ | Отменено / не актуально |