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

## Введение

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

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

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

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

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

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

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

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

![](/files/-MGrQLY_Qccm2KG_Kfn_)

{% file src="/files/-MGsZjv5LoQ0XnAHl1-3" %}
Пример ролевого приложения
{% 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 загрузить файл

![](/files/-MH6AHNlwNBVA3FQOgXW)

* * **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>
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.axatel.by/razrabotchikam/sozdanie-rolevogo-prilozheniya.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
