# Создание ролевого приложения

## Введение

Ролевое приложение представляет собой Web-приложение, которое загружается в домен Аксател. Права доступа пользователей определяются ролевыми политиками безопасности в рамках Домена.

Каждое Ролевое приложение имеет связанный SVC сценарий, который выполняет задачи вычислений и предоставления данных для отображения в Ролевом приложении конечному пользователю. Запуск сценария происходит через выполнение REST запроса /exec

Ролевое приложение работает после успешной аутентификации пользователя в домене Аксател.

## Файл ролевого приложения

Ролевое приложение представляет из себя zip-архив, который будет распакован на сервере при установке.

Архив содержит в себе две значимые части:

1. Файл **roleapp.json**
2. Непосредственно web-приложение, выполняемое на стороне браузера

Пример структуры файлов Ролевого приложения

![](https://998883843-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBugD3PIZvmw6JbYwCi%2F-MGrQ2Er-hApkOgO3PKi%2F-MGrQLY_Qccm2KG_Kfn_%2F2020-09-10_12-51-12.jpg?alt=media\&token=c59b7273-95ac-443b-87b0-5d429f089495)

{% file src="<https://998883843-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBugD3PIZvmw6JbYwCi%2F-MGsZb1rX9hxS2JSSUln%2F-MGsZjv5LoQ0XnAHl1-3%2F01.Sample_roleapp_full.zip?alt=media&token=5ae0d592-a9b0-466f-ba7b-81e31ffe4bd7>" %}
Пример ролевого приложения
{% endfile %}

Файл **roleapp.json** в корне архива содержит описание приложения. Как правило все файлы приложения находятся также в корне архива (index.html и другие).

### Файл roleapp.json

Должен быть валидным json файлом, размер которого не превышает 10Kb.\
Пример json файла.

```
{
 "name": "Roleapp Sample",
 "description": "Monitor (old) as RoleApp description",
 "order": 5000,
 "fa-icon": "fa-paw",
 "iconPath": "assets/desktop.svg"
}
```

| Название    | Описание                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name        | <p>Название ролевого приложения. Значение поля будет использовано для названия ролевого приложения в списке если администратор оставил поле "title" объекта ролевого приложения пустым.</p><p>Тип поля – строка</p><p>Обязательная переменная</p>                                                                                                                                                                                                                                                                                           |
| description | <p>Описание ролевого приложения. Значение будет доступно через <a href="http://r2demo.rostell.ru/docs/r/develop/api/rest/v1/iam/sessions.html#get_current">/rest/v1/iam/sessions/current</a>.</p><p>Тип поля – строка</p><p>Обязательная переменная</p>                                                                                                                                                                                                                                                                                     |
| order       | <p>Порядок ролевого приложения при сортировке для отображения в списке. Администратор может принудительно его задать в поле ext.order объекта roleapp.</p><p>Тип поля – число</p><p>Необязательная переменная</p>                                                                                                                                                                                                                                                                                                                           |
| fa-icon     | <p>имя класса иконки Font Awesome.</p><p>Необязательная переменная</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| iconPath    | <p>путь до иконки для списка приложений относительно папки ролевого приложения.</p><p>Обязательная переменная</p>                                                                                                                                                                                                                                                                                                                                                                                                                           |
| folder      | <p>Подпапка внутри архива в качестве папки с web-документами (по-умолчанию используется весь архив от корня)</p><p>Необязательная переменная</p><p>Если указан, то в результате по url’у установленного приложения будет доступен не корень архива, а эта подпапка (в url не появляется).</p><p>Например, если “folder”:”dist”, то index.html должен быть размещен в подпапке dist и файл roleapp.json нельзя будет получить из прямого URL (/app/appname/roleapp.json )</p><p>├── dist</p><p>│   └── index.html</p><p>└── roleapp.json</p> |

## Установка ролевого приложения

1. Необходимо создать **SVC сценарий**
2. Создать **RoleApp** приложение
   * Раздел «Обработка сервиса» - «Ролевые приложения»
   * Новый объект
     * Путь приложения – уникальный путь в рамках текущего домена
     * Название приложения – как приложение будет отображаться на главной странице после авторизации
     * Права доступа – указать все права (роли) которым разрешен доступ к этому приложению
     * **SVC сценарий** – выбрать необходимый SVC сценарий
3. Загрузить zip архив с **RoleApp**

* Получить ID Ролевого приложения (после создания открыть карточку на редактирование и скопировать id)
* Открыть Talend API Tester (Restlet) addon в браузере и методом PUT загрузить файл

![](https://998883843-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBugD3PIZvmw6JbYwCi%2F-MH69e1SSKbHZ4-NhHDj%2F-MH6AHNlwNBVA3FQOgXW%2Fassets_help-center_-MGrBybXewXN1zHsRNdd_-MGrP1RxsWw1ES4IgyCc_0.png?alt=media\&token=9cbaa0a4-010c-4625-9e48-97c3d7a9fc0d)

* * **Method** = put
  * **URL** = [http://demo.axatel.ru/rest/v1/domain/roleapps/daee4ff3-0170-4032-d6ca-fa163eec3818/attachment](http://demo.rostell.ru/rest/v1/domain/roleapps/daee4ff3-0170-4032-d6ca-fa163eec3818/attachment)
    * [http://demo.axatel.ru](http://demo.rostell.ru/) = URL WS
    * **/rest/v1/domain/roleapps/** = constant
    * **daee4ff3-0170-4032-d6ca-fa163eec3818** = RoleApp ID
    * **/attachment** = constant
  * **Content-Type** = multipart/form-data<br>

Также загрузить файл можно через curl (нужна сессионная куки)

curl -b curl-worker.cookies \ -X PUT \ -F 'file=@roleapp\_sample.zip' <http://demo.axatel.ru/rest/v1/domain/roleapps/daee4ff3-0170-4032-d6ca-fa163eec3818/attachment>

4\.  Проверить корректность загруженного файла можно через запрос на тот же адрес но с \
Method = GET. В результате браузер должен скачать файл attachment (переименовать в attachment.zip и он будет равен первоначально загруженному файлу)

После установки ролевого приложения И корректной связи по ролевым меткам оно появляется в списке приложений на главной странице (страница после авторизации или по клику на логотипе Аксател).

## Результат установки

Приложение становится доступным на основной странице Аксател (после аутентификации и при клике на логотипе Аксател).

URL установки не известен автору приложения заранее – Путь приложения определяет администратором в момент установки. Это позволяет установить, например, разные версии одного ролевого приложения в разные папки и пользоваться ими одновременно.

Для корректной работы необходимо ссылаться на ресурсы ролевого приложения по относительным путям, например:

```
<!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="utf-8">
 <title>R.API Monitor</title>
 <link rel="stylesheet" href="css/jsoneditor.min.css">
 <script src="js/jsoneditor.min.js"></script>
 <script src="js/jquery-3.1.1.min.js"></script>
 <script src="js/aes-js.js"></script>
 <script src="js/base64.js"></script>
 <script src="monitor.js"></script>
```

Ресурсы будут загружаться из папок **…/css/, …/js/** и т.д. или напрямую из папки ролевого приложения как **…/monitor.js**.

Если есть необходимость использовать полный путь ссылок, то из переменной **window\.location.pathname** в **javascript** можно это выяснить. \
Например,

```
<html>
 <body>
 <h1>Role Application "Def2".<h1>
 <div id="abc"></div>
 <script>
 console.log('1');
 (function() {
 var path = window.location.pathname;
 console.log('path = ', path);
 document.getElementById('abc').innerHTML = path;
 })();
 console.log('2');
 </script>
 </body>
</html>
```
