Смена роли
Смена роли
https://gptunnel.ru/api/v1/access/changeRole Назначает роль сотрудникам организации по логину — каждому логину своя роль. Запрос принимает массив пар { login, role } (до 25). Каждый элемент обрабатывается независимо: ошибка по одному не отменяет обработку остальных. При повторе одного логина берётся первое вхождение. В ответе — сколько ролей изменено, сколько с ошибкой и перечень логинов с ошибками (причина по каждому).
Роли и права
В организации три роли (сверху вниз — от большего к меньшему):
- owner (владелец) — высшая роль;
- admin (администратор);
- member (участник) — низшая роль.
Права на смену роли зависят от роли создателя API-ключа (ключ действует с его ролью). Действовать можно над сотрудниками с ролью равной или ниже своей (но не над собой):
| Роль создателя ключа | Кого может менять | Какие роли может назначать |
|---|---|---|
| owner | owner, admin, member | owner / admin / member |
| admin | admin, member | admin / member |
| member | никого (нет доступа) | — |
Дополнительно:
- Равная или ниже. Менять роль сотрудника с более высокой ролью нельзя — такой логин вернётся с ошибкой
forbidden. Роль равную своей менять можно: owner может менять другого owner, а admin — другого admin. - Нельзя менять свою роль — логин владельца ключа вернётся с ошибкой
forbidden. - admin не может назначать роль owner. Элемент с
role = ownerот не-владельца вернётся с ошибкойforbidden(остальные элементы обработаются). - Повторная установка той же роли безопасна (идемпотентна) и засчитывается в
changed.
Headers
| Параметр | Тип | Описание |
|---|---|---|
Authorization* | string | API ключ |
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
items* | object[] | Массив пар «логин + роль» (от 1 до 25). Каждый элемент: { login, role } |
items[].login* | string | Логин сотрудника |
items[].role* | string | Назначаемая роль этому логину: owner | admin | member |
В ответе: changed — сколько ролей изменено (в т.ч. логинов, уже имевших эту роль), failed — сколько с ошибкой, failedLogins — перечень логинов с ошибкой (причина и пояснение по каждому).
Причины ошибок в failedLogins:
Причины ошибок
| Параметр | Тип | Описание |
|---|---|---|
not_found | string | Сотрудника с таким логином нет в организации |
forbidden | string | Роль цели выше вашей, либо это ваш собственный логин |
error | string | Непредвиденная ошибка при обработке этого сотрудника |
Пример запроса
curl --request POST \ --url https://gptunnel.ru/api/v1/access/changeRole \ --header 'Authorization: YOUR_API_KEY' \ --header 'Content-Type: application/json' \ --data '{ "items": [ { "login": "ivanov", "role": "admin" }, { "login": "petrov", "role": "member" } ]}'import axios from 'axios'
const response = await axios({ method: 'POST', url: 'https://gptunnel.ru/api/v1/access/changeRole', headers: { Authorization: 'YOUR_API_KEY', }, data: { items: [ { login: 'ivanov', role: 'admin' }, { login: 'petrov', role: 'member' }, ], },})
console.log(response.data)import requests
response = requests.post( 'https://gptunnel.ru/api/v1/access/changeRole', headers={'Authorization': 'YOUR_API_KEY'}, json={ 'items': [ {'login': 'ivanov', 'role': 'admin'}, {'login': 'petrov', 'role': 'member'}, ], },)
print(response.json())Пример ответа
{ "code": 0, "changed": 1, "failed": 1, "failedLogins": [ { "login": "petrov", "reason": "not_found", "message": "Employee not found in the organization." } ]}{ "code": 3, "message": "Invalid input, check schema issues.", "details": []}{ "error": { "message": "Unauthorized", "type": "unauthorized_request_error", "param": null, "code": null }}{ "code": 7, "message": "Not allowed to perform this action for the organization."}{ "code": 13, "message": "Employee management is not available from a personal account. Use a business organization API key."}{ "code": 1, "message": "Internal server error.", "trace_id": "66a346f64dcb57627c03d596"}