fix(tradein/auth): единый источник ролей — БД first, YAML только legacy-fallback (закрывает эскалацию до admin и 403 своим) #3331
1 changed files with 17 additions and 0 deletions
|
|
@ -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 employee↔pilot покрыты tests/test_role_single_source.py.
|
||||
"""
|
||||
monkeypatch.setattr(auth_mod, "_registry_role", lambda username: None)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Test app — использует РЕАЛЬНЫЙ rbac_guard (app/core/rbac.py), а не копию.
|
||||
# ---------------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue