Публичные и внутренние формы. Контроль доступа
Введение
Для любого шаблона (кроме шаблона процесса) можно создать неограниченное число форм. На них можно поместить разные атрибуты, и каждая форма может предназначаться для отдельной категории пользователей.
Доступ пользователей к форме определяется с помощью ролей и типа формы.
Здесь представлены инструкции по контролю доступа к формам посредством типа формы, а также по созданию ссылок на формы для внешних пользователей.
Определения
Предусмотрено три типа форм: публичная, внутренняя, внешняя.
-
- К публичной форме можно перейти с помощью селектора форм рядом с заголовком записи.
- Внутренняя форма не отображается в селекторе форм.
- Внутренняя форма отображается, только если она вложена в другую форму или указана в качестве формы для записей (например, при запуске процесса, при создании записи, в диалоговых окнах).
- К внутренней форме можно перейти по прямой ссылке.
- Вложенная форма отображается в составе родительской формы независимо от того, является ли она внутренней или публичной, и независимо от разрешения на просмотр вложенной формы в роли пользователя.
- Ни внутренняя, ни публичная форма не отображается, если роль пользователя не разрешает просмотр данной формы.
- По умолчанию формы являются публичными. Чтобы ограничить доступ к форме через селектор форм, необходимо сменить тип формы на внутреннюю.
Публичные и внутренние формы предназначены для пользователей, выполнивших вход в Comindware Platform.
См. Пример настройки внутренней формы для ограничения доступа к ней.
-
Внешние формы предназначены для пользователей мобильного приложения и мобильных браузеров, у которых нет аккаунта в Comindware Platform.
- К внешней форме можно перейти по специальной ссылке без входа в Comindware Platform.
Доступ к стартовым формам и формам пользовательских задач процессов
В начальном событии и пользовательской задаче отображается только определённая форма связанного шаблона записи и селектор форм недоступен.
Стартовая форма и форма пользовательской задачи всегда являются публичными.
Стартовые формы и формы пользовательских задач не могут быть внешними.
Пример настройки внутренней формы для ограничения доступа к ней
В качестве примера создадим в шаблоне записи две формы и разграничим доступ к ним:
- Клиент — публичная форма, будет доступна через селектор форм наряду с основной формой шаблона.
- Диспетчер — внутренняя форма, не будет доступна через селектор форм. Пользователь сможет перейти к этой форме только по прямой ссылке, например, отправленной в эл. письме.
Настройка форм
- Создайте приложение «Оформление заявок».
-
Создайте шаблон записи «Заявки» со следующими атрибутами:
Название Тип Свойства Тип ТС Список значений Добавьте значения «легковой автомобиль», «автобус», «грузовой автомобиль» Количество пассажиров Число Количество знаков после запятой: 0 Водитель Аккаунт -
Поместите на основную форму шаблона атрибуты «Тип ТС» и «Количество пассажиров».
- Создайте форму «Клиент» и поместите на неё атрибут «Количество пассажиров».
- Создайте форму «Диспетчер» и поместите на неё атрибуты «Тип ТС», «Количество пассажиров», «Водитель».
- В свойствах формы «Диспетчер» выберите тип «Внутренняя».
Тестирование внешней формы
- Создайте новую запись в шаблоне «Заявки».
- Откроется основная форма шаблона.
-
Нажмите селектор форм рядом с заголовком записи:
- В раскрывающемся списке под селектором будут отображаться основная форма шаблона и форма «Клиент».
- Форма «Диспетчер» в списке отображаться не будет.
-
Выберите и просмотрите форму «Клиент».
-
Перейдите к форме «Диспетчер», используя ссылку вида:
http://<hostname>/#form/<oa.XX>/<form.XX>/<RecordID>
Здесь:
http://<hostname>/
— адрес сервера Comindware Platform;<oa.XX>
— ID шаблона записи «Заявки» (его видно в списке шаблонов);<form.XX>
— ID формы «Диспетчер» (его видно в адресной строке браузера в конструкторе формы);<RecordID>
— ID записи «Заявки».
Пример создания ссылки на внешнюю форму
Рассмотрим пример настройки ссылки на внешнюю форму «Клиент» из предыдущего примера, чтобы любой клиент мог оставлять заявку, не выполняя вход в Comindware Platform.
Логика работы внешних форм
Если для создана ссылка на внешнюю форму, она действует следующим образом:
- Пользователь переходит по ссылке на внешнюю форму:
- если пользователь не вошёл в Comindware Platform, для него будет создан аккаунт в группе «Анонимные пользователи» с соответствующими разрешениями;
- если пользователь перед открытием ссылки вошёл в Comindware Platform, он будет работать обычным образом с учётом разрешений своего аккаунта.
- Если в ссылке закодированы значения атрибутов, форма будет заполнена этими данными.
- Форма откроется для пользователя.
- Пользователь заполнит и сохранит форму.
- При сохранении формы будет создана запись в шаблоне, к которому относится форма.
Особенности внешних форм
- Внешние ссылки работают только в мобильном приложении и мобильном браузере.
- Для обработки данных формы применяются разрешения, настроенные в роли, которая назначена группе «Анонимные пользователи».
Данные для формирования ссылки на внешнюю форму
Для формирования ссылки на внешнюю форму соберите следующие данные:
<your-host>
— URL экземпляра Comindware Platform;SolutionId
—строка
видаsol.XXX
, ID приложения, к которому относится форма;ObjectId
—строка
видаoa.XXX
, ID шаблона записи, к которому относится форма;TargetId
—строка
видаform.XXX
, ID формы, которую должны открывать внешние пользователи;UserCommandId
—строка
видаevent.XXX
, ID кнопки, которую требуется добавить на форму (необязательный параметр). Эта кнопка будет добавлена к кнопкам, настроенным с помощью конструктора формы.-
Объект со значениями атрибутов для предварительного заполнения формы (необязательный аргумент):
"PredefinedData":
{
"attribute1SystemName": "value",
"attribute2SystemName": "value",
...
"attributeNSystemName": "value"
}
Настройка ссылки
Необходим доступ к API
Для формирования ссылки на внешнюю форму используется метод System Core API /Base/EncryptedNavigationReferenceService/Generate
, поэтому вам потребуется доступ к API Comindware Platform.
См. «Аутентификация для доступа к API» и «Методы System Core API».
-
Соберите следующие данные для формирования ссылки:
- ID приложения «Оформление заявок», например
sol.1
; - ID шаблона «Заявки», например
oa.1
; - ID формы «Клиент», например
form.1
; - Значение атрибута «Количество пассажиров» для заполнения формы, например
2
.
- ID приложения «Оформление заявок», например
-
Выполните
POST
‑запрос к методуBase/EncryptedNavigationReferenceService/Generate
:curl -X POST \
"https://<your-host>/api/public/system/Base/EncryptedNavigationReferenceService/Generate" \
-H "Content-Type: application/json" \
-u <username>:<password> \
-d '{
"SolutionId": "sol.1",
"ObjectId": "oa.1",
"TargetId": "form.1",
"TargetType": "Form"
}'
Здесь:
"TargetType": "Form"
— обязательный фиксированный параметр, который не следует изменять.Подставьте фактические ID
Не забудьте указать в запросе фактические идентификаторы сущностей из своего экземпляра Comindware Platform.
-
В ответ придёт сгенерированная ссылка на форму вида:
"https://<your-host>/Resolve?data=<encryptedData>"
-
Проверьте, что ссылка сформирована корректно, с помощью метода
Base/EncryptedNavigationReferenceService/Decrypt
, указав в теле запроса закодированную строку<encryptedData>
(без частиhttps://<your-host>/Resolve?data=
):curl -X POST \
"https://<your-host>/api/public/system/Base/EncryptedNavigationReferenceService/Decrypt" \
-H "Content-Type: application/json" \
-u <username>:<password> \
-d "<encrypted>"
-
В ответ должен прийти объект со свойствами целевой формы:
{
"SolutionId": "sol.1",
"ObjectId": "oa.1",
"TargetId": "form.1",
"TargetType": "Form"
}
Тестирование внешней формы
- Откройте браузер на мобильном устройстве в режиме «Инкогнито», чтобы протестировать форму от лица внешнего пользователя.
-
Вставьте в адресную строку ссылку на внешнюю форму вида:
https://<your-host>/Resolve?data=<encryptedData>
-
Должна открыться форма «Клиент».
- Заполните и сохраните форму.
- Откройте браузер на компьютере.
- Войдите в Comindware Platform.
- Удостоверьтесь, что в шаблоне «Заявки» появилась запись, заполненная с помощью внешней формы на мобильном устройстве.
Эта статья была полезна 1 чел.