Написание ролевого приложения
Введение
Ролевым приложением называют web-приложение, которое можно установить в домен системы «Era», создав объект типа roleapp и загрузив в него файл архива.
Ролевое приложение может иметь связанный с ним служебный сценарий, код которого указан в roleapp entity в поле svcscriptcode.
Запуск связанного служебного сценария происходит через выполнение запроса /exec.
В данной статье описан сам файл ролевого приложения, его значимые элементы, а также видный снаружи результат установки ролевого приложения.
Файл ролевого приложения
Ролевое приложение представляет из себя zip-архив, который будет распакован на сервере при установке.
При этом архив должен содержать файл roleapp.json на верхнем уровне.
├── assets
│ └── img
│ └── desktop.svg
├── css
│ └── jsoneditor.min.css
├── index.html
├── js
│ ├── aes-js.js
│ ├── base64.js
│ ├── jquery-3.1.1.min.js
│ └── jsoneditor.min.js
├── monitor.js
└── roleapp.json
Файл roleapp.json в корне архива содержит описание приложения. Как правило все файлы приложения находятся также в корне архива (index.html и другие).
roleapp.json
Должен быть валидным json файлом, размер которого не превышает 10Kb. Все поля опциональные. Минимальный json может быть пустым объектом ({}).
{
"name": "Roleapp Sample", (1)
"description": "Monitor (old) as RoleApp description", (2)
"order": 5000, (3)
"fa-icon": "fa-paw" (4)
"icon": "assets/img/desktop.svg" (5)
}
1 | name – название ролевого приложения. Значение поля будет использовано для названия ролевого приложения в списке если администратор оставил поле "title" объекта ролевого приложения пустым. Тип поля строка, иначе значение будет проигнорированно. |
2 | description – описание ролевого приложения, идёт напрямую в /rest/v1/iam/sessions/current. Тип поля строка, иначе значение будет проигнорированно. |
3 | order – порядок ролевого приложения при сортировке для отображения в списке. Администратор может принудительно его задать в поле ext.order объекта roleapp, чтобы заменить значение из roleapp.json. |
4 | fa-icon – имя класса иконки Font Awesome. |
5 | icon – путь до иконки для списка приложений относительно папки ролевого приложения. |
Есть возможность указать подпапку внутри архива в качестве папки с web-документами (по-умолчанию будет использован весь архив от корня). Если roleapp.json содержит поле "folder", то в результате по url’у установленного приложения будет доступен не корень архива, а эта подпапка (в url не появляется).
Таким образом, разницу между режимом по-умолчанию и режимом с подпапкой можно проследить на примере roleapp.json: в режиме по-умолчанию файл становится доступным по http: /app/folder/roleapp.json
но в режиме с подпапкой он оказывается не виден.
Пример:
├── dist
│ └── index.html
└── roleapp.json
{
"name": "Def roleapp",
"order": 5000,
"fa-icon": "fa-folder-open",
"folder": "dist"
}
Установка ролевого приложения
После установки ролевого приложения оно появляется в списке приложений если проходит все этапы фильтрации. Фильтруются приложения по следующему правилу:
-
пользователь должен иметь хотя бы одну роль из списка ролей приложения (поле "roles" объекта roleapp) - задаются администратором.
Результат установки
Приложение становится доступным по URL указанном в выдаче /rest/v1/iam/sessions/current, например /app/folder/ и при таком запросе будет отдаваться содержимое index.html (только корень приложения).
Здесь нужно понимать, что URL установки не известен автору приложения заранее, ведь folder определяется администратором в момент установки. Таким образом администратор имеет возможность установить, например, разные версии ролевого приложения в разные папки и пользоваться ими одновременно.
Следствием вышесказанного является необходимость ссылаться на ресурсы ролевого приложения по относительным путям, например:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>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>
Где ресурсы будут загружаться из папок /app/folder/css/, /app/folder/js/ и т.д. или как /app/folder/monitor.js из папки ролевого приложения, что является стандартной работой браузера.
С другой стороны, применяя javascript очень легко динамически узнать путь установки ролевого приложения при загрузке страницы (из переменной window.location.pathname), например:
<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>