Files
IPWhiteList/docs/questions.md
T

81 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Вопросы для уточнения — IP WhiteList
> Дата: 2026-05-30
> Кому: команда Keycloak / Nubes
> Статус: ждём ответов
---
## 1. Admin-роль: «отдельный чек-бокс»
**ТЗ:** Администратор = `clientId = WZ01112` + отдельный чек-бокс.
**Вопросы:**
- В каком claim приходит этот чек-бокс? (realm_role, client_role, group, attribute?)
- Как точно называется claim? Примеры возможных значений:
- `"roles": ["whitelist-admin"]`
- `"resource_access.whitelist.roles": ["admin"]`
- `"is_admin": true`
- Нужна ли поддержка нескольких админов (не только WZ01112)?
**Как обойти:** захардкодить `clientId === 'WZ01112'` как признак админа, добавить `TODO` с ссылкой на этот файл.
---
## 2. Multi-company: формат claims
**ТЗ:** Пользователь может принадлежать нескольким компаниям, в UI — переключатель.
**Вопросы:**
- `clientID` в токене — это строка или массив строк?
- Если массив — как называется claim? (`clientIDs`, `groups`, что-то ещё?)
- Есть ли claim с названием компании (для отображения в переключателе)?
- Пример реального payload токена (без секретов) для пользователя с 2+ компаниями.
**Как обойти:** всегда считать `clientId` строкой (один клиент), переключатель не делать, добавить `TODO`.
---
## 3. IP-ограничение /export
**ТЗ:** Endpoint экспорта «на старте может работать без авторизации (по сетевому ограничению)».
**Вопросы:**
- Ограничение делаем в приложении или на уровне ingress (nginx/traefik)?
- Если в приложении — где взять список разрешённых IP? (env var, файл, БД?)
- Если ingress — кто настраивает?
**Как обойти:** оставить `/export` открытым, добавить `TODO`.
---
## 4. Email пользователя
**ТЗ:** `email` — идентификация пользователя для аудита.
**Вопросы:**
- Как называется claim с email? (`email`, `preferred_username`, что-то ещё?)
- Всегда ли он присутствует в токене?
**Как обойти:** брать `payload.email` с fallback на `payload.sub`, добавить `TODO`.
---
## 5. DEV_MODE
**Вопросы:**
- Нужен ли dev-режим на платформе Nubes (не локально)?
- Или всегда только реальный Keycloak?
**Как обойти:** оставить `DEV_MODE=true` с проверкой что в production падает при включении.
---
## Условные обозначения в коде
```
// TODO(Keycloak): уточнить формат claim — см. docs/questions.md#1
// FIXME(Keycloak): временно, заменить после ответа команды
// HACK(DEV_MODE): заглушка, убрать перед продакшеном
```