fix(tradein): praktika brand only under praktika account — drop kopylov mapping (brand leak) #1758
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1758
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/praktika-brand-only-praktika-user"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проблема (client-facing бренд-утечка)
Trade-in PDF брендируется по владельцу оценки (
created_by→_USERNAME_BRAND, анти-spoofing #7). Маппинг содержал ДВА аккаунта на бренд Практики:praktikaИkopylov. → оценки, созданные подkopylov(52 шт), рендерили PDF с лого/брендом ГК Практика. Инцидент: отчёт, ушедший Бруснике, нёс лого Практики (конкурента).Требование: «Практика показывается только юзеру praktika, остальным — generic».
Решение
_USERNAME_BRAND→ только{"praktika": "praktika"}(убранkopylov). Все прочие (kopylov,user2,admin, …) →None→ generic дефолт (name «Trade-In Estimator», без лого). Бренд резолвится при генерации PDF (не хранится) → существующие kopylov-оценки сразу станут generic после деплоя, без миграции данных.roles.yamlне тронут — тамkopylov/praktikaэто РОЛЬpilot(не бренд).get_brand_for_user,services/brand.py, PDF-рендер — без изменений.Изменения
app/core/auth.py—_USERNAME_BRAND = {"praktika": "praktika"}+ переписан комментарий (причина утечки, #657/#7 ref).tests/test_me_brand.py—kopylov → None(был→ praktika); regression-guardtest_user_scope_brand_none_for_kopylov; сохраненыpraktika → praktika, generic-user → None.Тесты
Full suite: 1987 passed, 1 skipped, 0 failed. test_rbac/idor/quota/history (юзают kopylov для ролей/quota/owner-scope, НЕ бренд) — зелёные. Ruff clean.
Прод-проверка после деплоя
PDF оценки под
kopylov→trade-in-generic-<id>.pdf, без лого Практики; подpraktika→trade-in-praktika-<id>.pdf(бренд жив).