Skip to content

Авторизация (RBAC)

Роли

Система RBAC включает четыре предопределённых роли:

Admin

Полный административный доступ ко всем ресурсам организации.

go
RoleAdmin = "admin"
Permissions: read, write, delete, manage_users, manage_teams,
             manage_organizations, view_analytics, export_data,
             manage_api_keys, manage_roles

Manager

Управление SLO, командами и аналитикой.

go
RoleManager = "manager"
Permissions: read, write, manage_teams, view_analytics, export_data

Developer

Работа с SLO и метриками, без управления пользователями.

go
RoleDeveloper = "developer"
Permissions: read, write, view_analytics

Viewer

Только чтение, без возможности изменять данные.

go
RoleViewer = "viewer"
Permissions: read, view_analytics

Матрица доступа

ДействиеAdminManagerDeveloperViewer
Просмотр 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 — определение ролей и их permissions
  • user_roles — назначение ролей пользователям (с привязкой к организации и опционально к команде)
  • resource_permissions — права на конкретные ресурсы