Безопасность и аудит
Аутентификация, бизнес-доступ, scopes и журналирование.
Аутентификация
Better Auth управляет email/password credentials, secure sessions, reset tokens, login/logout и password recovery. Публичная регистрация отключена. Каждый production deployment инвалидирует все активные сессии после migrations.
Бизнес-RBAC
Better Auth User.role и ITAM-роли — разные системы. Доступ приложения хранится
в Role, Permission, UserRole и RolePermission.
Каждый route проверяет *.read на сервере. Server Actions повторно проверяют
write/delete grants. Sidebar и global search только отражают доступ, но не
считаются security boundary.
Visibility scopes
Для grant assets.read поддерживаются:
ALL— все доступные активы;OWN_DEPARTMENT— активы подразделения связанногоPerson.
Самый широкий scope из нескольких ролей побеждает. Пользователь с
OWN_DEPARTMENT без linked employee видит ноль строк. Scope применяется к
per-class registries, asset detail/passport и staff-utilization report.
Scope покрывает не все поверхности
Другие asset-related reports, /relations и asset write actions сейчас не
ограничиваются по подразделению. Scope ASSIGNED не реализован.
Audit engine
ITAM-модели журналируются Prisma Client Extension. Server Action устанавливает
actor через AsyncLocalStorage, extension сравнивает старые и новые значения и
пишет AuditEvent с human-readable details и structured metadata.
Batch operations обходят extension hooks, поэтому чувствительные массовые действия выполняются циклом отдельных create/update/delete.
Экспорт
Каждый Excel export явно создаёт audit event:
asset.exported;report.exported;license.exported;audit.exported.
Audit Log поддерживает actor, date range, object type, action, поиск, pagination и собственный Excel export.
Защитные меры
- cron secrets сравниваются через timing-safe helper;
- branding uploads проверяются по MIME, signature и размеру;
- email HTML экранирует динамические значения;
- secrets не имеют префикса
NEXT_PUBLIC_*; - базовые security headers запрещают framing и MIME sniffing;
- raw SQL с пользовательским вводом отсутствует.
Известная поверхность Better Auth admin
Bootstrap Owner имеет внутреннюю Better Auth роль admin; административные
HTTP routes плагина обходят ITAM Audit Log. Это не даёт Owner новых прав, но
создаёт неаудируемый административный путь и требует отдельного решения.

