Роли через API
Через REST API можно создавать и изменять роли и их права, а также назначать роли пользователям и группам. Те же операции доступны в интерфейсе раздела Управление доступом → Роли; устройство раздела описано в статье Роли.
Запросы отправляйте на адрес сервера бэкенда, токен передавайте в заголовке Authorization:
POST /api/v1/roles
Authorization: Bearer <токен>
Content-Type: application/jsonСправочник методов системы 5А с описанием всех полей открывается по адресу https://<Адрес сервера бэкенда>:8443/api/v1/docs. Методы ролей собраны в нём в группах Roles, Users, Local Groups и LDAPs.
Методы
Роль
| Метод | Путь | Назначение |
|---|---|---|
GET | /api/v1/roles | список ролей |
POST | /api/v1/roles | создать роль |
GET | /api/v1/roles/{roleId} | получить роль |
PUT | /api/v1/roles/{roleId} | изменить название, описание и права роли |
DELETE | /api/v1/roles/{roleId} | удалить роль |
GET | /api/v1/roles/{roleId}/users | пользователи с этой ролью — персонально и/или через группу |
GET | /api/v1/roles/{roleId}/groups | локальные и LDAP-группы с этой ролью |
Назначение роли пользователям
| Метод | Путь | Назначение |
|---|---|---|
GET | /api/v1/users/{userId}/roles | список ролей пользователя |
POST | /api/v1/users/{userId}/roles/{roleId} | назначить роль пользователю |
DELETE | /api/v1/users/{userId}/roles/{roleId} | снять роль с пользователя |
Назначение роли группам
| Метод | Путь | Назначение |
|---|---|---|
GET | /api/v1/local-groups/{groupId}/roles | список ролей локальной группы |
POST | /api/v1/local-groups/{groupId}/roles/{roleId} | назначить роль локальной группе |
DELETE | /api/v1/local-groups/{groupId}/roles/{roleId} | снять роль с локальной группы |
GET | /api/v1/ldap-groups/{groupId}/roles | список ролей LDAP-группы |
POST | /api/v1/ldap-groups/{groupId}/roles/{roleId} | назначить роль LDAP-группе |
DELETE | /api/v1/ldap-groups/{groupId}/roles/{roleId} | снять роль с LDAP-группы |
Идентификаторы roleId, userId и groupId — UUID из ответов системы.
Тело запроса роли
POST /api/v1/roles и PUT /api/v1/roles/{roleId} принимают один и тот же объект; у обоих методов обязательны name и permissions.
name— название роли. Обязательное поле, от1до255символов, должно быть уникальным.description— описание роли. Необязательное поле.permissions— права роли. Обязательное поле; структура та же, что у персональных прав пользователя, состав и смысл прав описаны в разделе Управление правами пользователя.
Права состоят из двух блоков:
balancer— права кластеров балансировки. Блокclusters[]содержит запись на каждый кластер:id— имя кластера, то же значение, чтоclusterIdв путях методов/api/v1/clusters/{clusterId};full_access,add_services,edit— права кластера;services[]— права по конфигурациям балансировки кластера:id— UUID конфигурации,read,edit,delete.
gslb— права GSLB:full_access— полный доступ ко всем GSLB-кластерам;clusters[]— права по отдельным GSLB-кластерам:idиfull_access. При включённомfull_accessмассивclustersигнорируется.
Ответы
GET /api/v1/roles и GET /api/v1/roles/{roleId} возвращают роль с полями:
id— UUID роли;name,description— название и описание;permissions— права в той же структуре, что в запросе;created_at,updated_at— дата и время создания и последнего изменения.
GET /api/v1/users/{userId}/roles возвращает роли пользователя — поля роли плюс:
direct—true, если роль назначена пользователю персонально и её можно снять с него;false— роль получена только через группу;via_groups— названия групп, через которые пользователь получил роль.
GET /api/v1/roles/{roleId}/users возвращает по одной записи на каждого пользователя:
id,username,first_name,last_name,email— идентификатор и учётные данные пользователя;direct,via_groups— назначение роли, как в списке ролей пользователя.
GET /api/v1/roles/{roleId}/groups возвращает по одной записи на группу:
id,name,description— идентификатор, название и описание группы;source— происхождение группы:local— локальная,ldap— импортированная из LDAP;dn,ldap_config_id— distinguished name группы и идентификатор её конфигурации LDAP; заполняются только для групп сsource: ldap.
Назначение и снятие
POST /api/v1/users/{userId}/roles/{roleId}назначает роль персонально. Персональные права пользователя, если они заданы, имеют приоритет над правами роли.POST /api/v1/local-groups/{groupId}/roles/{roleId}назначает роль всем текущим участникам группы.DELETEснимает роль со всех участников, кроме тех, кто получает её через другую группу.POST /api/v1/ldap-groups/{groupId}/roles/{roleId}назначает роль LDAP-группе. Роль, назначенная группе, распространяется на всех её участников — см. Назначение роли группам.DELETE /api/v1/roles/{roleId}удаляет роль: назначения снимаются со всех пользователей и групп, которым роль была выдана.
Пример
Создание роли с правом редактирования кластера балансировки slb-1:
POST /api/v1/roles
{
"name": "cluster-editor",
"description": "Редактирование кластера slb-1",
"permissions": {
"balancer": {
"clusters": [
{
"id": "slb-1",
"full_access": false,
"add_services": false,
"edit": true,
"services": []
}
]
},
"gslb": { "full_access": false, "clusters": [] }
}
}Ответ 201 содержит id созданной роли. Назначьте роль пользователю:
POST /api/v1/users/<UUID пользователя>/roles/<UUID роли>Ответ 200 без тела означает, что роль назначена.
Ошибки
Тело ошибки содержит три поля:
| Поле | Значение |
|---|---|
code | HTTP-статус ответа; у ошибок валидации запроса — код нарушения 601–616 |
reason | вид ошибки, по которому клиент принимает решение: invalid, not_found, conflict, internal |
message | описание ошибки |
| Статус | Когда |
|---|---|
400 | тело запроса не прошло смысловую проверку: некорректные данные роли |
404 | роль, пользователь или группа не найдены |
409 | название роли занято другой ролью — в ответах POST и PUT ролей |
422 | значение поля нарушает ограничение схемы: длина name, неверный формат UUID в пути запроса |
500 | внутренняя ошибка сервера |