Авторизация (RBAC)
Роли
Система RBAC включает четыре предопределённых роли:
Admin
Полный административный доступ ко всем ресурсам организации.
go
RoleAdmin = "admin"
Permissions: read, write, delete, manage_users, manage_teams,
manage_organizations, view_analytics, export_data,
manage_api_keys, manage_rolesManager
Управление SLO, командами и аналитикой.
go
RoleManager = "manager"
Permissions: read, write, manage_teams, view_analytics, export_dataDeveloper
Работа с SLO и метриками, без управления пользователями.
go
RoleDeveloper = "developer"
Permissions: read, write, view_analyticsViewer
Только чтение, без возможности изменять данные.
go
RoleViewer = "viewer"
Permissions: read, view_analyticsМатрица доступа
| Действие | Admin | Manager | Developer | Viewer |
|---|---|---|---|---|
| Просмотр SLO | ✓ | ✓ | ✓ | ✓ |
| Создание SLO | ✓ | ✓ | ✓ | ✗ |
| Редактирование SLO | ✓ | ✓ | ✓ | ✗ |
| Удаление SLO | ✓ | ✗ | ✗ | ✗ |
| Управление пользователями | ✓ | ✗ | ✗ | ✗ |
| Управление командами | ✓ | ✓ | ✗ | ✗ |
| Аналитика | ✓ | ✓ | ✓ | ✓ |
| Экспорт данных | ✓ | ✓ | ✗ | ✗ |
| Управление API ключами | ✓ | ✗ | ✗ | ✗ |
| Управление ролями | ✓ | ✗ | ✗ | ✗ |
API ключи
Для программного доступа к API SLOzy поддерживает API-ключи.
Создание ключа
http
POST /api/v1/api-keys
Authorization: Bearer <admin_token>
Content-Type: application/json
{
"name": "CI/CD интеграция",
"scopes": ["read", "view_analytics"],
"expires_at": "2027-06-11T00:00:00Z"
}Ответ:
json
{
"api_key": {
"id": 1,
"key_prefix": "sky_a1b2",
"name": "CI/CD интеграция",
"scopes": ["read", "view_analytics"],
"expires_at": "2027-06-11T00:00:00Z"
},
"key": "sky_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
}Ключ показывается только один раз при создании. В БД хранится хэш ключа (KeyHash).
Использование ключа
http
GET /api/v1/slos
Authorization: Bearer sky_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0Управление ключами
http
GET /api/v1/api-keys # Список ключей
POST /api/v1/api-keys # Создать ключ
PUT /api/v1/api-keys/:id # Обновить ключ
DELETE /api/v1/api-keys/:id # Отозвать ключДоступ к ресурсам
RBAC middleware (internal/middleware/rbac.go) перехватывает запросы и проверяет права:
go
// Проверка permission
middleware.RequirePermission("manage_users")
// Проверка доступа к конкретному SLO
middleware.RequireResourcePermission("slo", extractSLOID, "write")
// Проверка роли
middleware.RequireRole("admin")
middleware.RequireManager(next)Типы ресурсов: slo, team, organization, user, api_key.
Таблицы БД
RBAC использует три таблицы (миграция 000015_rbac_system):
roles— определение ролей и их permissionsuser_roles— назначение ролей пользователям (с привязкой к организации и опционально к команде)resource_permissions— права на конкретные ресурсы