fix(tradein/auth): единый источник ролей — БД first, YAML только legacy-fallback (закрывает эскалацию до admin и 403 своим) #3331

Merged
bot-backend merged 3 commits from fix/3316-role-single-source into main 2026-09-05 17:37:38 +00:00
Showing only changes of commit 18e0f1d999 - Show all commits

View file

@ -42,6 +42,23 @@ def _reset_auth_cache() -> None:
auth_mod.reset_cache_for_tests()
@pytest.fixture(autouse=True)
def _legacy_yaml_only(monkeypatch: pytest.MonkeyPatch) -> None:
"""Реестр в ЭТОМ файле молчит — здесь проверяется legacy-путь roles.yaml.
#3316 сделал `get_role` DB-first (реестр → YAML-fallback), и без этой
изоляции результат файла зависел бы от ОКРУЖЕНИЯ: локально без БД шла
YAML-ветка и всё было зелено, а в CI, где реестр засеян миграцией 193
(kopylov=manager, user*=employee), те же ассерты краснели. Тест, который
отвечает по-разному в двух окружениях, не проверяет ничего.
Здесь закреплена ровно YAML-семантика (разбор файла, globs, поведение
guard'а и /me на trusted-header пути); DB-first, приоритет реестра и
эквивалентность scope employeepilot покрыты tests/test_role_single_source.py.
"""
monkeypatch.setattr(auth_mod, "_registry_role", lambda username: None)
# ---------------------------------------------------------------------------
# Test app — использует РЕАЛЬНЫЙ rbac_guard (app/core/rbac.py), а не копию.
# ---------------------------------------------------------------------------