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

Роли и доступы

Права в reKassa описываются доступами (users.read, roles.assign, …). Доступы не выдаются напрямую — их несут роли, а роли назначаются пользователям. У каждой роли есть ранг: чем он выше, тем старше роль. Ранг решает, кем сотрудник может управлять.

Таблицы ниже собраны из каталога ролей в коде бэкенда при сборке документации — это ровно тот набор, который API создаёт в базе при запуске.

Роли сотрудников reKassa. Назначаются на уровне всей платформы и дают доступ к методам /v1/portal/*. Доступ на уровне платформы действует и во всех организациях клиентов.

РольРангДоступы
Директор
platform.director
100
  • users.read
  • users.manage
  • users.block
  • roles.read
  • roles.assign
  • orgs.create
  • orgs.read
  • orgs.manage
  • orgs.verify
  • branches.manage
  • contracts.read
  • contracts.manage
Технический директор
platform.tech_director
90
  • users.read
  • users.manage
  • users.block
  • roles.read
  • roles.assign
  • orgs.create
  • orgs.read
  • orgs.manage
  • orgs.verify
  • branches.manage
  • contracts.read
  • contracts.manage
Руководитель технической поддержки
platform.support_lead
70
  • users.read
  • users.manage
  • users.block
  • roles.read
  • roles.assign
  • orgs.read
  • orgs.verify
  • contracts.read
Главный бухгалтер
platform.chief_accountant
60
  • users.read
  • orgs.read
  • contracts.read
Клиентский менеджер
platform.client_manager
50
  • users.read
  • roles.read
  • orgs.create
  • orgs.read
  • orgs.manage
  • orgs.verify
  • contracts.read
  • contracts.manage
Маркетинговый менеджер
platform.marketing_manager
50нет
Техническая поддержка
platform.support
40
  • users.read
  • roles.read
  • orgs.read
  • contracts.read
Бухгалтер
platform.accountant
40
  • orgs.read
  • contracts.read

Ранг сотрудника — наибольший ранг среди его ролей платформы. Если ролей платформы нет, ранга нет вовсе, и управлять другими пользователями нельзя.

  1. Директор (ранг 100) — высший ранг. Может изменять, блокировать и назначать роли кому угодно, включая других директоров, и выдавать любую роль.

  2. Остальные управляют только теми, чей ранг строго ниже их собственного, и выдают только роли строго ниже своего ранга. Руководитель технической поддержки (70) может заблокировать сотрудника поддержки (40), но не другого руководителя поддержки (70) и не технического директора (90).

  3. Нельзя выдать то, чего нет у вас. Роль можно назначить или снять, только если у вас есть все её доступы. Пользователя можно изменить или заблокировать, только если у вас есть все доступы его ролей платформы. Это правило действует и для директора.

Нарушение правил 1–2 даёт 403 insufficient_rank, правила 3 — 403 permission_not_held со списком недостающих доступов в details.missing:

{
"error": {
"code": "permission_not_held",
"message": "Нельзя выдать доступы, которых нет у вас самих",
"details": { "missing": ["roles.assign"] },
"requestId": "7d2b9e40-3a1c-4f86-b5e2-0c8f1a6d9e37"
}
}

Базовая роль каждого, кто зарегистрировался сам через /v1/auth/register. Даёт работу со своим аккаунтом через /v1/me и право добавить свою организацию (orgs.create) — тогда пользователь становится «Владельцем» нового клиента. Доступ orgs.create этой роли действует только для нового клиента: в чужие клиенты и в портал он не пускает.

РольРангДоступы
Пользователь
account.user
0
  • orgs.create

Шаблоны ролей для сотрудников клиента: владельца бизнеса, бухгалтерии, кассиров. У клиента своя шкала рангов, и «Владелец» (100) — высший ранг внутри клиента: он управляет всеми, включая других владельцев. Доступы users.block и orgs.verify ролям клиента не выдаются.

РольРангДоступы
Владелец
client.owner
100
  • users.read
  • users.manage
  • roles.read
  • roles.assign
  • orgs.create
  • orgs.read
  • orgs.manage
  • branches.manage
Директор
client.director
90
  • users.read
  • users.manage
  • roles.read
  • roles.assign
  • orgs.read
  • orgs.manage
  • branches.manage
Управляющий
client.manager
70
  • users.read
  • roles.read
  • orgs.read
  • branches.manage
Главный бухгалтер
client.chief_accountant
60
  • users.read
  • orgs.read
Кассир
client.cashier
10
  • orgs.read

Роли клиента действуют на одном из уровней и не назначаются на уровне платформы (422 role_scope_mismatch):

Уровень Как назначается
весь клиент «Владелец» — автоматически тому, кто создал клиента первой организацией
организация POST /v1/orgs/{id}/members без branchId
филиал POST /v1/orgs/{id}/members с branchId

Один и тот же доступ означает разный охват в зависимости от уровня назначения: users.manage на уровне платформы — управление всеми пользователями, у «Владельца» — сотрудниками всех организаций его клиента, у роли, назначенной на филиал, — только этим филиалом. Правила рангов для сотрудников организаций — в разделе Сотрудники и PIN.

ДоступЧто разрешает
users.readПросмотр пользователей
users.manageСоздание и изменение пользователей
users.blockБлокировка и разблокировка пользователей
roles.readПросмотр ролей и доступов
roles.assignНазначение и снятие ролей
orgs.createДобавление организаций
orgs.readПросмотр организаций и филиалов
orgs.manageИзменение реквизитов и подача на проверку
orgs.verifyПроверка организаций (сотрудники платформы)
branches.manageСоздание и изменение филиалов
contracts.readПросмотр договоров с клиентами (сотрудники платформы)
contracts.manageГенерация и отправка договоров в Didox (сотрудники платформы)
GET/v1/portal/roles

Требует доступ roles.read. Необязательный параметр audience — platform, client или account — фильтрует роли по назначению. Сортировка: по назначению, затем по убыванию ранга.

Окно терминала
curl 'https://api.rekassa.uz/v1/portal/roles?audience=platform' \
-H 'Authorization: Bearer <accessToken>'
[
{
"id": "b2e8d4a1-7c3f-4e95-a0d6-5f1c9e3b7a82",
"code": "platform.support",
"name": "Техническая поддержка",
"audience": "platform",
"rank": 40,
"isSystem": true,
"permissions": ["users.read", "roles.read", "orgs.read"]
}
]

isSystem: true — роль из каталога системы. У ролей, созданных клиентом, code может быть null.

GET/v1/portal/permissions

Требует доступ roles.read. Возвращает все доступы с описаниями, по алфавиту:

[
{ "code": "branches.manage", "description": "Создание и изменение филиалов" },
{ "code": "orgs.create", "description": "Добавление организаций" },
{ "code": "orgs.manage", "description": "Изменение реквизитов и подача на проверку" },
{ "code": "orgs.read", "description": "Просмотр организаций и филиалов" },
{ "code": "orgs.verify", "description": "Проверка организаций (сотрудники платформы)" },
{ "code": "roles.assign", "description": "Назначение и снятие ролей" },
{ "code": "roles.read", "description": "Просмотр ролей и доступов" },
{ "code": "users.block", "description": "Блокировка и разблокировка пользователей" },
{ "code": "users.manage", "description": "Создание и изменение пользователей" },
{ "code": "users.read", "description": "Просмотр пользователей" }
]