RBAC-матрица (single-tenant v1)
Обновлено: 2026-05-30
Источник правды: код (resource_access.py, Sidebar.tsx, api/v1/*).
Design-документы могут расходиться — при конфликте верен этот файл.
Иерархия ролей
| Роль | Уровень | Описание |
super_admin | 3 | Владелец / ИБ: полный контроль, implicit connect ко всем серверам |
admin | 2 | Техоператор: управление серверами и алертами, connect только с grant |
user | 1 | Конечный пользователь: только выданные серверы |
Модель доступа к серверам
| Действие | super_admin | admin | user |
| Видит все серверы в списке | ✓ | ✓ | ✗ (только granted) |
| Connect без explicit grant | ✓ (implicit) | ✗ | ✗ |
| Connect с grant / approved JIT | ✓ | ✓ | ✓ |
| CRUD серверов (add/edit/delete) | ✓ | ✓ | ✗ |
| Grant / revoke permission | ✓ | ✗ | ✗ |
Credential mode service_account при connect | ✓ | ✓ (с grant) | ✗ |
Ключевое отличие admin от super_admin: admin видит весь fleet для управления, но кнопка Connect активна только при наличии permission (прямой grant или одобренный Access Request).
| Страница | super_admin | admin | user |
| Dashboard | ✓ | ✓ | ✗ |
| Servers | ✓ | ✓ | ✓ (subset) |
| Monitor | ✓ | ✓ | ✓ |
| Active Sessions | ✓ | ✗ | ✗ |
| Users | ✓ | ✗ | ✗ |
| SFTP | ✓ | ✓ | ✓ |
| Alerts | ✓ | ✓ | ✗ |
| Access Requests | ✓ | ✓ | ✓ |
| Audit Logs | ✓ | ✗ | ✗ |
| Recordings | ✓ | ✗ | ✗ |
| Settings | ✓ | ✓ (частично) | ✗ |
| Profile | ✓ | ✓ | ✓ |
Подробнее: sidebar-by-role.md.
Access Requests (JIT)
| Действие | super_admin | admin | user |
| Создать запрос | ✓ | ✓ | ✓ |
| Видеть свои запросы | ✓ | ✓ | ✓ |
| Видеть очередь pending (все) | ✓ | ✗ | ✗ |
| Approve / Deny | ✓ | ✗ | ✗ |
| Cancel свой pending | ✓ | ✓ | ✓ |
Примечание: в design-документе JIT для approve указан admin — в текущем коде approve/deny только require_super_admin. См. credential-modes.md для RDP.
Users и grants
| Действие | super_admin | admin | user |
| Users page (UI) | ✓ | ✗ (redirect) | ✗ |
| API: list/create users | ✓ (UI) | ✓ (API) | ✗ |
| Назначить роль super_admin | ✓ | ✗ | ✗ |
POST/DELETE /permissions (grant/revoke) | ✓ | ✗ | ✗ |
GET /permissions (список) | ✓ | ✓ | ✗ |
Audit и recordings
| Действие | super_admin | admin | user |
| Audit Logs page | ✓ | ✗ | ✗ |
| Export / filter audit | ✓ | ✗ | ✗ |
| Delete screenshot / recording | ✓ | ✗ | ✗ |
| Свои audit-события в Profile | ✓ | ✓ | ✓ |
Settings
| Раздел | super_admin | admin | user |
| Session policy (idle timeout) | ✓ | ✓ | ✗ |
| Terminal themes | ✓ | ✓ | ✗ |
| LDAP (read/test) | ✓ | ✗ | ✗ |
| Retention / danger zone | ✓ | ✗ | ✗ |
| AI assistant config | ✓ | ✗ | ✗ |
Connect и протоколы
| Протокол | Путь | Требование |
| RDP | /ws/session/{token} | grant или super_admin |
| SSH terminal | /ws/ssh/{token} | grant или super_admin |
| SFTP REST | /api/resources/{id}/sftp/* | grant + can_write для мутаций |
| VNC | /ws/session/{token} | grant или super_admin |
SFTP read-only grant: can_write=false блокирует upload/delete/rename/mkdir.
API — минимальные роли (backend)
| Endpoint group | Мин. роль |
GET /api/resources | любой authenticated |
POST/PATCH/DELETE /api/resources | admin |
POST/DELETE /api/resources/permissions | super_admin |
GET /api/resources/permissions | admin |
GET/POST /api/access-requests | authenticated |
POST .../approve, .../deny | super_admin |
GET /api/audit/* (кроме own) | super_admin |
GET /api/users | admin |
| Users UI | super_admin only |
GET /api/sessions/active, disconnect others | admin / super_admin |
GET /api/dashboard/* | admin |
GET/POST /api/alerts/* | admin |
| LDAP, retention, AI settings | super_admin |
Связанные файлы в репозитории
backend/app/services/resource_access.py — connect gate backend/app/api/v1/resources.py — list_resources, grants backend/app/api/v1/access_requests.py — JIT backend/app/core/deps.py — require_admin, require_super_admin frontend/src/shared/components/Sidebar.tsx — menu gates