Наследование архива ролевого приложения

Предварительные условия

  • Ролевое приложения создано в одном из родительских доменов (возможно на несколько уровней выше).

  • Указанное ролевое приложение имеет загруженный архив и отображается в списке приложений этого домена.

Операции

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") если исходный путь является относительным (не начинается со слеша) и не содержит протокола и имени хоста, иначе достройка не происходит.