Skip to main content

Вызов формы ввода (чтение/ввод/редактирование) из проекта

Бизнес-требования

Формы ввода должны вызываться из источника, который создан в DIS

В настройках источника доступны 3 кнопки для перехода:

  • Просмотреть формы ввода
  • Ввести данные
  • Редактировать форму ввода

image.png

Про выдачу доступов на эти права см. отдельное ТЗ

При нажатии на кнопку выполняется редирект в пространство DIS только для этого проекта:

  • Посмотреть – с правами зрителя
  • Записать – с правами редактора данных
  • Редактировать – с правами редактора форм

Fastboard при этом передаёт:

  • Учетные данные пользователя
  • Запрошенные права доступа
  • Специальный хэш-пароль для валидации запрошенных прав

Про правила формирования и хранения этих данных см. отдельное ТЗ

Решение

Добавить переход в DIS в диспетчере данных. Осуществлять переход в зависимости от прав доступа.

Интерфейс

Расположение (только у источников-DIS):
Проект → Диспетчер данных (скрипт загрузки) → Контекстное меню источника (⋮) → После кнопки "Изменить параметры" 

Добавляются 3 новые кнопки (с иконками):

  • Просмотреть форму ввода
  • Ввести данные в форму ввода
  • Редактировать форму ввода

Пользовательская логика

При нажатии на кнопки выполняется переход по привязанной ссылке (на указанную форму ввода с выбранными правами)

Системная логика (Фронтенд)

При нажатии на любую кнопку выполняется редирект по ссылке linkexternal_link источника, в контекстном меню которого нажата кнопка. Перед этим:

  • Выполняется запрос в API Fastboard – GET api/v3/dis/user/{userId}/hash-pass, в котором передаются:
    • userId пользователя
    • projectId проекта, из которого выполняется переход
    • role – в зависимости от кнопки, которая была нажата:
      • "read" для "Просмотреть форму ввода" 
      • "write" для "Ввести данные в форму ввода"
      • "change" для "Редактировать форму ввода"
  • В ответ на запрос приходит или hash-пароль, или ошибка доступа
    • В случае ошибки показывать системное сообщение с ошибкой с бэкенда
  • В случае успеха выполняется запрос в API DIS – POST, в котором передаются:
    • login пользователя
    • hash-пароль с бэкенда
    • role – в зависимости от кнопки, которая была нажата:
      • "read" для "Просмотреть форму ввода" 
      • "write" для "Ввести данные в форму ввода"
      • "change" для "Редактировать форму ввода"
    • projectId проекта, из которого выполняется переход
    • sourceId источника, из которого нажата кнопка
  • Если в ответ приходит ошибка, то показывать системное сообщение с ошибкой из DIS

Системная логика (Бэкенд)

Новые API-вызовы:

  • GET api/v3/dis/user/{userId}/hash-pass – получить хэш-пароль указанного пользователя для указанного доступа к указанному источнику в DIS.
    • В запросе приходит:
      • userId пользователя
      • projectId проекта, из которого выполняется переход
      • role – в зависимости от кнопки, которая была нажата:
        • "read" для "Просмотреть форму ввода" 
        • "write" для "Ввести данные в форму ввода"
        • "change" для "Редактировать форму ввода"
    • В ответ отправляется hash-пароль из БД по сочетанию userId-projectId-role
      • Если пароля нет, то в ответ уходит ошибка прав доступа
  • POST – передать в DIS креды для доступа пользователя:
    • В запросе уходит: 
      • login пользователя
      • hash-пароль по сочетанию userId-projectId-role
      • role – в зависимости от кнопки, которая была нажата:
        • "read" для "Просмотреть форму ввода" 
        • "write" для "Ввести данные в форму ввода"
        • "change" для "Редактировать форму ввода"
      • projectId проекта, из которого выполняется переход
      • sourceId источника, из которого нажата кнопка
    • В ответ запрос ничего не ожидает