Управление видимостью и доступностью UI-элементов
Описание
В UniBPM реализован механизм управления доступностью UI-элементов в зависимости от роли пользователя. Администратор может скрывать поля, делать их доступными только для чтения или оставлять без ограничений. Настройки применяются динамически и влияют только на интерфейс — логика системы не изменяется.
Основные преимущества механизма:
- Гибкая настройка интерфейса без участия разработчиков.
- Централизованное управление видимостью UI-элементов.
- Backend хранит и отдаёт правила в зависимости от ролей.
- Frontend автоматически применяет доступы.
- Лёгкая адаптация под различные сценарии и заказчиков.
Где находится функциональность
Админ → Доступ к полям.
В этом разделе администратор:
- выбирает роль пользователя,
- просматривает список элементов интерфейса,
- назначает политику доступа: Скрыть / Только чтение.
После сохранения настройка сразу применяется ко всем пользователям выбранной роли.
Как работает механизм на backend
Backend хранит набор правил доступа, где указано:
- роль пользователя,
- элемент интерфейса,
- политика (Скрыть или Только чтение).
Backend обеспечивает:
- приём и сохранение новых правил,
- обновление существующих правил,
- удаление правил,
- формирование списка правил для текущего пользователя,
- передачу этих правил на frontend.
Реальное скрытие или блокировка выполняется фронтендом на основе данных от backend.
Как сохраняются правила (Скрыть / Только чтение)
Когда администратор выбирает “Скрыть” или “Только чтение”, система создаёт новую запись в таблице ui_access_rule.
В базу сохраняются:
- роль (например ROLE_unibpm_general_user),
- элемент (например SYSMENU:ORGANIZATIONS),
- выбранная политика (HIDE или READONLY).
Правило начинает действовать сразу же.
Как удаляются правила (нажатие на крестик)
Если администратор нажимает на крестик рядом с выбранной политикой, система удаляет соответствующую запись из таблицы ui_access_rule.
После удаления:
- ограничение перестаёт действовать,
- элемент снова отображается без ограничений,
- фронтенд при обновлении страницы больше не скрывает и не блокирует элемент.
Как frontend получает и применяет правила
При загрузке интерфейса frontend отправляет запрос на получение правил текущего пользователя. Backend, основываясь на ролях, возвращает объединённый список применимых правил.
Интерфейс:
- скрывает элементы с политикой Скрыть,
- блокирует элементы с политикой Только чтение.
Ограничения политики «Только чтение» (READ ONLY)
Политика «Только чтение» применяется не ко всем элементам интерфейса.
READ ONLY НЕ работает для следующих элементов
1) Меню (System Menu)
- Разделы меню остаются доступными.
- Пользователь может переходить в разделы по клику.
- CRUD-действия (create / edit / delete) не блокируются.
Пример:
Меню Persons пользователь может:
- открывать раздел;
- создавать, редактировать и удалять записи;
- работать с формами редактирования.
2) Ticket buttons
Политика READ ONLY не применяется к следующим кнопкам тикета:
- Run process
- Create copy
- Merge with
- Move to
- Delete
Кнопки остаются кликабельными и выполняют действия.
3) Ticket activity
В активности тикета политика «Только чтение»:
- не блокирует действия;
- не ограничивает пользовательскую активность.
Где READ ONLY работает корректно
Политика «Только чтение» применяется и корректно работает для элементов внутри тикета, включая:
- выпадающие списки (Priority, Impact, State и др.);
- поля формы тикета;
- загрузку и работу с файлами;
- поля заявки;
- редактируемые атрибуты тикета.
Общая схема работы механизма
Администратор создаёт или обновляет правило. Backend сохраняет его в базе данных. Пользователь входит в систему. Keycloak передаёт роли пользователя. Frontend запрашивает правила для текущего пользователя. Backend возвращает все правила, относящиеся к его ролям. Интерфейс скрывает или ограничивает UI-элементы.
Приоритет роли администратора
Если у пользователя есть роль администратора (unibpm-admin), то все ограничения, назначенные для других ролей (например, unibpm_general_user), игнорируются.
Что это означает
- Администратор всегда видит полный UI без скрытых элементов.
- Политики «Скрыть» и «Только чтение», назначенные для других ролей, не применяются, даже если эти роли тоже присутствуют у пользователя.
- Администратор получает полный доступ ко всем:
- кнопкам,
- вкладкам,
- пунктам меню,
- полям формы,
- действиям.
Таким образом, роль администратора является приоритетной, и ограничения других ролей не могут ее перекрыть.