Перейти к содержимому

Пользователи и доступ

Без входа доступны только страница входа и /api/health. Роли вложены друг в друга:

Роль Может
Наблюдатель смотреть всё, подбирать кейсы по изменениям без создания прогона
Тестировщик + создавать и проходить прогоны, назначать исполнителей, импортировать JUnit
Редактор + кейсы, сьюты, гигиена, tsmc push, удаление прогонов
Администратор + проекты, API-токены, пользователи, вехи и спринты
  • Пароли хранятся как scrypt-хеши, сессии — как SHA-256 хеши cookie (HttpOnly, SameSite=Lax, 30 дней).
  • Изменяющие запросы из браузера обязаны нести заголовок X-Requested-With: tsmc (защита от CSRF).
  • После 5 неудачных попыток входа пара «адрес + email» блокируется на 15 минут.
  • У каждой версии кейса записан автор и канал изменения (интерфейс, API-токен, tsmc push, импорт JUnit); в истории версий можно посмотреть, что изменилось относительно предыдущей версии: поля и шаги (добавленные, удалённые, изменённые).
  • Журнал действий (только администратор, «Журнал» в шапке): входы и неудачные попытки, пользователи и роли, токены, создание и удаление проектов, сьютов, кейсов, прогонов, архив и закрепление прогонов, вехи и спринты, push и импорт — кто, когда, с какого адреса. Пароли в журнал не попадают. API: GET /api/audit?action=run&project=SHOP&before=<id>.
  • Учётные записи не удаляются, а отключаются: в истории результатов остаются имена. Смена пароля и отключение завершают все сессии пользователя. Последнего администратора нельзя понизить или отключить.
  • API-токен проекта действует как редактор и только в своём проекте. CLI (tsmc) работает только с токеном.
  • В прогоне у кейса есть исполнитель (фильтр «Мои») и автор каждого результата.

Открывая сервер в сеть, поставьте перед ним обратный прокси с HTTPS (nginx, Caddy) и задайте TSMC_SECURE_COOKIES=1, TSMC_TRUST_PROXY=1.