Наследование архива ролевого приложения
Предварительные условия
-
Ролевое приложения создано в одном из родительских доменов (возможно на несколько уровней выше).
-
Указанное ролевое приложение имеет загруженный архив и отображается в списке приложений этого домена.
Операции
1. Получить сущность ролевого приложения в родительском домене.
1.1. Пройти аутентификацию в родительском домене.
1.2. Получить сущность ролевого приложения.
$ curl -b <parent_cookie_file_path> \ (1)
<api_prefix>/rest/v1/domain/roleapps (2)
1 | <parent_cookie_file_path> – путь до файла из которого будет взята сессионная cookie для отправки серверу (родительский домен). |
2 | <api_prefix> – префикс URL, в формате http(s)://<host>:<port>. Адрес логической роли webserver с включеным API. |
Например:
$ curl -b curl-parent.cookies \
http://192.168.0.35/rest/v1/domain/roleapps
[
{
"archive": {
"_links": {
"self": {
"href": "/rest/v1/domain/roleapps/45f31bdd-016f-1838-2427-e0d55e0cd303/attachment"
}
}
},
"ext": {
"ct": "2019-12-18T08:55:30.87Z",
"lwt": "2019-12-18T08:55:30.87Z"
},
"folder": "moni",
"id": "45f31bdd-016f-1838-2427-e0d55e0cd303",
"opts": {
"comment": "",
"title": ""
},
"roles": [
"admin"
],
"svcscriptcode": "",
"title": "Monitor"
}
]
2. Создать сущность ролевого приложения
2.1. Пройти аутентификацию в дочернем домене.
2.2. Создать сущность ролевого приложения с тем же id
, что и в родительском домене.
$ curl -b <cookie_file_path> \ (1)
-X POST \
-H 'Content-Type: application/json' \
-d '{"id":"<id>","title":"<title>","folder":"<folder>","roles":["<roles>"],"svcscriptcode":"<svcscript_code>"}' \ (2) (3) (4) (5) (6)
<api_prefix>/rest/v1/domain/roleapps (7)
1 | <cookie_file_path> – путь до файла из которого будет взята сессионная cookie для отправки серверу. |
2 | <id> – идентификатор сущности ролевого приложения. |
3 | <title> – отображаемое название приложения в корневом менеджере веб-приложений. |
4 | <folder> – папка установки ролевого приложения. |
5 | <roles> – список пользовательских ролей, которым доступно приложение. |
6 | <svcscript_code> – код служебного сценария, запускаемого для обработки поступающих HTTP-запросов из приложения на страницу /exec. |
7 | <api_prefix> – префикс URL, в формате http(s)://<host>:<port>. Адрес логической роли webserver с включеным API. |
Например:
$ curl -b curl-worker.cookies \
-X POST \
-H 'Content-Type: application/json' \
-d '{"id":"45f31bdd-016f-1838-2427-e0d55e0cd303","title":"Example RoleApp","folder":"example_folder","roles":["admin"],"svcscriptcode":"roleapp_sample_svcscript"}' \
http://192.168.0.35/rest/v1/domain/roleapps
{
"ext": {
"ct": "2021-03-01T12:56:39.43Z",
"lwt": "2021-03-01T12:56:39.43Z"
},
"folder": "example_folder",
"id": "45f31bdd-016f-1838-2427-e0d55e0cd303",
"opts": {
"comment": "",
"recv_timeout": 0,
"title": ""
},
"roles": [
"admin"
],
"svcscriptcode": "roleapp_sample_svcscript",
"title": "Example RoleApp"
}
3. Пропустить загрузку файла ролевого приложения в дочернем домене.
Если файл ролевого приложения в дочернем домене не загружать, то при совпадении id
сущностей будет автоматически применён файл из родительского домена.
Если же файл в дочернем домене загрузить, то он будет использован как обычно. При удалении файла в дочернем домене будет снова применён файл из родительского домена.
Проверка результата
Ролевое приложение присутствует в поле "webapps" как один из элементов массива, при условии что пользователь имеет роль, которая указана при создании ролевого приложения.
$ curl -b <cookie_file_path> \ (1)
<api_prefix>/rest/v1/iam/sessions/current (2)
1 | <cookie_file_path> – путь до файла из которого будет взята сессионная cookie для отправки серверу. |
2 | <api_prefix> – префикс URL, в формате http(s)://<host>:<port>. Адрес логической роли webserver с включеным API. |
Например:
$ curl -b curl-worker.cookies \
http://192.168.0.35/rest/v1/iam/sessions/current
{
"domain": "test.ceceron.ru",
"domain_is_master": false,
"domain_type": "worker",
"domains": [
{
"domain": "ceceron.ru",
"is_master": true
}
],
"login": "cc",
"name": "cc",
"name_login": "cc (cc)",
"roles": ["admin",],
"session_id": "a97a70e5-0170-3d64-0abf-e0d55e0cd13e",
"solution": "era",
"tags": [],
"user_id": "3e0b285c-0167-e076-f613-e0d55e0cd13e",
"webapps": [
{
"description": "Monitor (old) as RoleApp description",
"fa-icon": "fa-desktop",
"icon": "/app/example_folder/desktop.png",
"iconPath": "/app/example_folder/assets/img/desktop.svg",
"name": "Example RoleApp",
"order": 5000,
"roles": [
"admin"
],
"url": "/app/example_folder/"
}
]
}
Элемент ролевого приложения представляет собой содержимое roleapp.json (неизвестные системе поля пробрасываются как есть). По сравнению с roleapp.json iam/sessions/current содержит следующие отличия:
-
добавлено поле "url" установки ролевого приложения. Например: /app/example_folder/, где /app/ - общий префикс, а example_folder - имя папки установки приложения, заданное администратором в объекте roleapp.
-
добавлено поле "roles" из соответствующего объекта roleapp. Список не пуст. Если для приложения не определено ни одной роли, то его не сможет увидеть ни один пользователь.
-
удалены поля "appkey", "apis", "rights".
-
достроены поля "icon" и "iconPath" - в начало дописан префикс установки ролевого приложения (поле "url") если исходный путь является относительным (не начинается со слеша) и не содержит протокола и имени хоста, иначе достройка не происходит.