Панель администратора RSG
Описание интерфейса, решения и инструкции по внедрению
Обзор решения RSG
RSG (Revit Server Guard) — административный модуль для Revit Server 2021/2022/2023/2024/2025/2026/2027. Его назначение — перенести управление доступом, аудит, обслуживание проектов и контроль шлюзов RS из набора разрозненных серверных настроек в единую веб-панель администратора.
Решение закрывает главный организационный риск Revit Server: без отдельного управляющего контура права на уровне проектов, ролей и разделов фактически нельзя назначать и проверять централизованно. RSG вводит формальную модель: пользователь → проект → роль → раздел/папка, а прокси-контур превращает эту модель в фактическое разрешение или запрет операций Revit-клиента.
ключевые задачи
- создать единый реестр пользователей, проектов, ролей и разделов;
- связать реальные папки Revit Server с дисциплинами/разделами документации;
- назначать проектный доступ и секционные права без ручного редактирования конфигурационных файлов;
- защищать Revit Server через прокси, который пропускает только разрешённые операции;
- видеть аудит действий: кто, когда и что изменил или попытался выполнить;
- централизованно настраивать резервное копирование и получать отчёты по активности;
- поддерживать несколько версий Revit Server и разные контуры/страны в единой панели.
компоненты решения
Компонент | Роль | Что даёт |
Панель администратора RSG | React/Vite-интерфейс администратора. | Навигация, таблицы, матрицы ролей, формы, локализация, тема, отчёты. |
RSG.API | .NET 8 backend и Windows Service. | REST API, авторизация админ-панели, SQLite, аудит, отчёты, бэкапы, управление прокси, работа с каталогом RS. |
RSG.Core | Общие сущности и контракты. | Пользователи, проекты, роли, разделы, права, лицензирование, DTO и интерфейсы. |
RSG.Infrastructure | Реализация сервисов и доступа к данным. | Компоненты: EF Core/SQLite, BackupService, ProjectService, RoleService, RevitProxyManagerService и LicenseService. |
RSG.HttpModule | Middleware на стороне RSG.API. | Проверка доступа на REST-запросах, фильтрация выдачи каталогов, HTTP gateway/маршрутизация. |
RSG.NetTcpProxy | .NET Framework 4.8.1 net.tcp proxy. | Перехват WCF/net.tcp трафика Revit Server, извлечение пользователя/машины/IP, блокировка или пропуск операций. |
База SQLite | rsg.db и rsg-proxy.db. | Основная модель прав, настройки, лицензия, журнал, служебные данные прокси. |
Как RSG решает свои задачи
1. Инвентаризация:RSG читает/обновляет каталог Revit Server, группирует проекты по версиям RS и создаёт локальные записи проектов.
2. Нормализация структуры:папки проекта связываются с разделами: например, АР/КР/ОВ/ВК становятся управляемыми дисциплинами, а не просто папками.
3. Ролевая модель:роль получает секционные права. Пользователю назначается роль в проекте; проектный администратор получает расширенные права.
4. Применение политики:HTTP middleware и net.tcp прокси проверяют пользователя, проект, путь и тип операции. Чтение/запись принимаются или отклоняются по модели RSG.
5. Аудит и отчётность:действия и отказы пишутся в журнал, статистика и экспорт помогают доказательно разбирать изменения доступа и активность.
6. Обслуживание:бэкапы, импорт/экспорт настроек, диагностика прокси и страница шлюзов уменьшают зависимость от ручной работы на сервере.
Логика доступа
Уровень | Правило | Практический смысл |
Пользователь | пользователь ищется по Revit-логину, AD-идентичности, машине и IP/доверенным привязкам. | Один логин должен соответствовать понятному субъекту доступа. |
проект | Запись UserProjectAccess даёт видимость проекта; роль «Нет» запрещает доступ. | пользователь видит только назначенные проекты. |
Корень проекта | CanWriteProject разрешает запись в корне проекта, но не автоматически внутри разделов. | Можно разрешить служебные операции в корне без полного доступа ко всем дисциплинам. |
Раздел/папка | SectionFolderBinding связывает папку с кодом раздела; RoleSectionAccess.CanWrite разрешает запись. | права выдаются на дисциплины, а не на произвольные ручные исключения. |
Администратор проекта | IsProjectAdmin или встроенные админ-роли дают полный доступ к проекту. | Нужно для BIM-администратора/ответственного за проект. |
RSG Admin | Администратор системы проходит проверку с полными правами управления. | Роль для обслуживания самого RSG и критических настроек. |
Описание функциональности
Единая модель доступа:пользователи, проекты, роли и разделы связаны в единой модели. Это лучше, чем хранить логику доступа в памяти отдельных администраторов или в разрозненных файлах.
Секционный контроль:RSG учитывает не только проект целиком, но и папки/разделы внутри проекта. Это особенно важно для BIM-процессов, где разные исполнители отвечают за разные дисциплины.
Прокси как enforcement-слой:панель не просто показывает таблицы, а может физически блокировать операции Revit Server через прокси-контур.
Аудит:журнал фиксирует изменения и отказы, что снижает риск нерасследуемых инцидентов.
Масштабируемость интерфейса:таблицы, фильтры, сортировки, дерево, карточки состояния и экспорт позволяют работать с большим числом проектов/пользователей.
Мультиверсионность:профили прокси и инстансы RS рассчитаны на Revit Server 2021–2027.
Сервисная эксплуатация:RSG.API устанавливается как Windows Service, использует ProgramData для runtime-данных, пишет логи и управляет firewall для HTTP-порта панели.
Локализация и тема:интерфейс уже содержит i18n-контур, переключение языка, страны и темы без перезапуска приложения.
Руководство по установке, запуску и настройке
Ниже приведён практический порядок действий, чтобы RSG работал как управляющая панель и как защитный прокси-контур для Revit Server.
1. предварительные условия
- Windows Server с установленным Revit Server нужных версий.
- .NET 8 Runtime/Hosting Bundle для RSG.API, если публикация не self-contained.
- .NET Framework 4.8.1 для RSG.NetTcpProxy.
- Node.js/npm нужны только на машине сборки фронтенда, а не обязательно на боевом сервере.
- права локального администратора для установки Windows Service, открытия firewall и изменения конфигов Revit Server.
- Папки ProgramData/RSG, backup-каталоги и логи должны быть доступны учётной записи службы.
- DNS-имя или статический IP сервера, которые будут использовать BIM-клиенты.
2. Начальная настройка в интерфейсе
- Откройте «Конфигурацию» и проверьте статус базы, лицензии, путей и версии.
- Установите или активируйте лицензию RSG.
- Проверьте/создайте пользователей, назначьте активность, роли, IP/машину или AD-идентичность.
- Откройте «Проекты», выполните обновление каталога RS и импортируйте нужные проекты.
- Откройте «Разделы» и настройте каталог дисциплин, если он отличается от встроенного.
- Свяжите папки проектов с разделами через привязки SectionFolderBinding.
- Откройте «Роли» и настройте матрицу прав по разделам.
- На странице «Обзор» проверьте итоговую матрицу назначений.
Назначение портов и сетевого контура
Контур | По умолчанию | Где задаётся | Кто должен иметь доступ | Комментарий |
RSG Admin Panel / API | TCP 5080 HTTP | appsettings: RSG:Http:Port или --install --http-port | Только администраторы RSG / BIM-админы | Служба RSG.API слушает этот порт. Установщик открывает firewall-правило «RSG Admin Panel». |
Dev UI Vite | TCP 5173 | RSG.AdminPanel/vite.config.js | Только разработчик | Нужно для разработки. В боевой эксплуатации UI обычно собран в RSG.API/wwwroot. |
Revit Server Admin HTTP | TCP 80 | Общие настройки прокси: AdminPort; IIS/RS | RSG.API и администраторы | Используется для RevitServerAdmin{year}/ и диагностики AdminRESTService. |
Публичный net.tcp прокси | TCP 808 | Общие настройки прокси: ListenPort | Клиенты Revit | Публичная точка входа прокси. Клиенты должны идти сюда, а не напрямую в Revit Server. |
Revit Server target net.tcp | TCP 8086 | Общие настройки прокси: TargetPort; конфиг RS | Только прокси и локальный сервер | Внутренняя конечная точка реального RS. Желательно закрыть прямой доступ от пользователей. |
Decision API / служебный контур | http://127.0.0.1:5080/api/proxy-gateways/decision | Строится из RSG:Http:Port или RSG:NetTcpProxy:DecisionApiUrl | Локально / служебно | В коде RSG.API есть endpoint decision; текущий NetTcpProxy также читает rsg.db и rsg-proxy.db напрямую, поэтому DB-пути критичны. |
Основная БД | C:\ProgramData\RSG\rsg.db | RSG:DatabasePath | RSG.API, proxy read-only | Хранить пользователей, проекты, роли, разделы, лицензию, флаги защиты. |
БД прокси | C:\ProgramData\RSG\rsg-proxy.db | RSG:NetTcpProxy:DatabasePath / ProxyDatabasePath | RSG.API и прокси | Хранить параметры listen/target и служебные события прокси. |
Логи RSG.API | C:\ProgramData\RSG\Logs\rsg-*.log | Serilog в appsettings | Администраторы | Диагностика backend и Windows Service. |
Логи прокси | C:\ProgramData\RSG\Logs\Proxy | RSG:NetTcpProxy:LogsPath / ProxyLogsPath | Администраторы | Диагностика запуска, маршрутизации, неизвестных пользователей и отказов. |
Правила выбора портов
- Не используйте 0–1023 для RSG:Http:Port; код откатывает такие значения на 5080.
- Не назначайте один и тот же порт RSG.API, proxy listen и реальному Revit Server.
- PublicHost не должен быть localhost/127.0.0.1, если клиенты подключаются с других машин.
- ListenPort прокси должен быть открыт от рабочих станций Revit-клиентов.
- TargetPort Revit Server должен быть доступен прокси, но не должен быть удобным обходным маршрутом для обычных пользователей.
- Если меняется TargetPort, проверьте правку конфигов RS и перезапуск связанных служб Revit Server/IIS согласно локальной схеме.
- Если используется HTTPS/TLS для админ-панели, поставьте reverse proxy/IIS перед RSG.API и ограничьте прямой HTTP-доступ на 5080.
Зачем нужен прокси и как его запустить
Прокси нужен потому, что Revit Server обслуживает рабочие операции Revit-клиентов не только через административный REST, но и через WCF/net.tcp транспорт. Админ-панель может хранить модель прав, но сама по себе не перехватывает трафик Revit. Прокси становится промежуточным слоем между клиентом и реальным Revit Server: он принимает net.tcp соединение, определяет пользователя/машину/IP и путь операции, сверяет это с моделью RSG и только после этого пропускает запрос дальше.
Что делает прокси
- слушает публичный net.tcp порт, обычно 808;
- перенаправляет разрешённый трафик на реальный Revit Server target host/port, обычно 127.0.0.1:8086;
- извлекает идентичность из NBFX/SOAP/WCF сообщений и сокета клиента;
- проверяет флаг защиты версии RS: Protected_2021… Protected_2027;
- разрешает видимость корневых папок проектов по назначениям пользователя;
- разрешает запись только в проектный корень, разделы или весь проект согласно роли;
- логирует неизвестных пользователей и спорные попытки доступа;
- фильтрует корневую выдачу Revit Server, чтобы пользователь не получал лишние проекты.
Пошаговый запуск прокси
- Скопируйте RSG.NetTcpProxy.exe и зависимости в каталог, указанный в RSG:NetTcpProxy:BinaryPath, например C:\Program Files\RSG\NetTcpProxy\. Откройте RSG Admin Panel → «Шлюзы RS».
- В общих настройках задайте PublicHost: DNS/IP, которые будут использовать Revit-клиенты. Не указывайте localhost, если клиенты не на этом же сервере.
- Задайте ListenPort, например 808. Это порт входа прокси для клиентов.
- Задайте TargetHost: реальный хост Revit Server. Если прокси установлен на том же сервере, обычно 127.0.0.1.
- Задайте TargetPort: внутренний net.tcp порт Revit Server, обычно 8086.
- Задайте AdminPort: HTTP-порт административного сайта Revit Server, обычно 80.
- Проверьте пути ProxyExecutablePath, ProxyDatabasePath, RsgDatabasePath и ProxyLogsPath.
- Нажмите «Применить». RSG запишет общие настройки, конфиг прокси и актуальную access-policy.
- Для нужных версий RS включите профиль и AuthorizationEnabled. Версии, не входящие в лицензию, должны оставаться выключенными.
- Нажмите «Детект» для каждой версии. Нормальная диагностика должна видеть Admin UI, serverProperties и содержимое.
- Нажмите «Start»/«Запустить». После запуска проверьте статус процесса, pid, доступность ListenPort и хвост лога.
- Перенастройте клиентские подключения Revit Server на PublicHost:ListenPort.
- Закройте прямой доступ пользователей к TargetPort, иначе прокси можно обойти.
- Проверить тестовым пользователем: нет назначения → отказ, есть проектная роль → видимость проекта, есть секционное право → запись в нужном разделе.
Что создаёт RSG при запуске прокси
Файл/параметр | Назначение |
RSG.NetTcpProxy.exe.config | Runtime-конфиг прокси: ListenAddress, PublicListenAddress, TargetAddress, пути БД/логов, параметры timeout/cache. |
access-policy.json | Снимок политики для версий RS и пользователей: protectionEnabled, allowedProjects, writeFolders. |
rsg-proxy.db | Служебные настройки прокси и журнал нераспознанных/служебных событий. |
RSG.NetTcpProxy.log | Подробный лог маршрутизации, ошибок порта, SQLite, режима bypass/protected и отказов. |
GlobalSettings Protected_YYYY | Флаг включения защиты для версии Revit Server. |
Важная логика безопасности прокси
- Если версия RS не защищена, прокси может работать в bypass-режиме: трафик идёт дальше, но защита фактически не применяется.
- Если лицензия не покрывает версию RS, policy-файл не должен включать protectionEnabled для этой версии.
- Если прокси не может открыть rsg.db, он может перейти в режим допуска/обхода, поэтому доступность и права на базу критичны.
- Если у пользователя нет доверенной привязки логин+машина+IP, он может попасть в список неизвестных запросов. После проверки администратором такую привязку можно принять.
- Нельзя оставлять внутренний target-порт RS открытым для пользователей, иначе они смогут обращаться к Revit Server, минуя RSG.
Регламент настройки доступа
Шаг | Действие | Проверка результата |
1 | Создать/импортировать пользователей. | В «Пользователях» видны активные записи, IP/машина/AD заполнены для реальных клиентов. |
2 | Обновить каталог RS. | В «Проектах» видны инстансы Revit Server и реальные папки. |
3 | Импортировать проекты в RSG. | проект получил RSFolderPath и отображается в списке. |
4 | Связать папки с разделами. | В «Разделах»/«Проектах» есть привязки FolderPath → SectionCode. |
5 | Настроить роли. | В матрице ролей отмечен CanWrite для нужных разделов. |
6 | Назначить пользователю роль в проекте. | В «Обзоре» появилась связка пользователь-проект-роль. |
7 | Обновить/запустить прокси. | access-policy.json актуален, прокси запущен, ListenPort доступен. |
8 | Протестировать Revit-клиентом. | Разрешённые операции проходят, запрещённые возвращают отказ и попадают в аудит/лог. |
Процедура резервного копирования
- Задайте BackupBasePath в appsettings или в настройках проекта.
- Для каждого проекта укажите путь бэкапа и расписание на странице «Бэкапы».
- Проверьте, что служба RSG.API имеет права записи в каталог бэкапа.
- Запустите ручной бэкап перед первым включением расписания.
- Проверьте историю: успешный статус, время, путь и отсутствие ошибок.
- Отдельно копируйте C:\ProgramData\RSG\rsg.db, rsg-proxy.db и proxy-gateways.json как конфигурационную часть RSG.
Диагностика и типичные проблемы
Симптом | Вероятная причина | Что проверить |
Панель не открывается | Служба не запущена, порт занят, firewall. | Команды и проверки: sc query RSG.API, netstat -ano, правило брандмауэра «RSG Admin Panel», RSG:Http:Port. |
Каталог RS не читается | Неверный host/admin port/API path, или RS недоступен. | Автоопределение, URL RevitServerAdminRESTService{year}/AdminRESTService.svc/serverProperties. |
Прокси не стартует | Не найден exe, занят ListenPort, нет прав на БД/лог. | Пути в «Шлюзы RS», RSG.NetTcpProxy.log, netstat, права ProgramData\RSG. |
клиенты не подключаются | PublicHost/ListenPort недоступны, или клиенты идут на старый адрес. | DNS/IP, firewall на ListenPort, настройки клиента Revit Server. |
Защита не срабатывает | Версия не защищена, прокси в bypass, клиенты обходят target-порт. | Protected_YYYY, AuthorizationEnabled, статус прокси, firewall на TargetPort. |
пользователь не распознан | Нет привязки логин/машина/IP, или Revit не передал заголовки. | История подключений, неизвестные запросы, Adopt/привязка IP/машины. |
Отказ при записи в раздел | Нет SectionFolderBinding, или у роли нет CanWrite. | Привязки разделов, матрица ролей, назначение пользователя в проекте. |
Отчёты/экспорт не формируются | Ошибка backend или прав на папку временных файлов. | Логи RSG.API, права службы, состояние базы. |
Рекомендации по эксплуатации в production
- Сразу назначить пароль встроенному Administrator и ограничить доступ к панели только администраторам.
- Использовать отдельное DNS-имя для RSG Admin Panel и отдельное DNS-имя/порт для Revit-прокси.
- Закрыть прямой пользовательский доступ к внутреннему target-порту Revit Server.
- Хранить rsg.db, rsg-proxy.db, proxy-gateways.json и appsettings.json в регулярном резервном копировании.
- Включить аудит и регулярно экспортировать отчёты для контроля доступа.
- Перед изменением портов делать скрин/экспорт текущих настроек прокси.
- Для HTTPS поставить reverse proxy/IIS с сертификатом и ограничить прямой доступ к HTTP-порту 5080.
- Перед обновлением версии RSG остановить прокси, сделать копии ProgramData\RSG, обновить файлы, запустить службу и выполнить детект версий RS.
Иллюстрация 1. Обзор — сводная таблица назначений доступа
Аннотированная версия: персональные значения в таблицах/полях замаскированы; выноски вынесены за пределы интерфейса.
Подробная легенда
№ | Элемент | Что делает | Как работает | Зачем нужен |
1 | Логотип RSG и фирменная область | Показывает продукт и отделяет системную навигацию от рабочей области. | Компонент Sidebar берёт выбранный вариант эмблемы из SidebarLogoContext; вариант хранится в localStorage и меняется на странице «Конфигурация». | Даёт постоянную визуальную привязку к приложению и не смешивает бренд с рабочими таблицами. |
2 | Левое меню разделов | Переключает страницы: обзор, пользователи, проекты, роли, разделы, шлюзы, бэкапы, аудит, статистика, конфигурация. | Активный пункт хранится в состоянии App; переход не перезагружает браузер, а меняет React-компонент страницы. | Так администратор быстро переходит между связанными контурами управления RSG. |
3 | Верхняя панель пользователя, языка, страны и темы | Показывает текущую учётную запись, язык интерфейса, страновой контур и светлую/тёмную тему. | I18nContext перестраивает подписи из labels.js; CountryScopeContext фильтрует роли/разделы по стране; ThemeContext переключает CSS-переменные. | Глобальные настройки видны всегда и применяются ко всем страницам без потери состояния. |
4 | Заголовок и хлебные крошки | Показывают, что открыта страница «Обзор» и это центр управления доступом. | Рендерится в hero-блоке DashboardPage; тексты берутся через t(...), поэтому локализуются. | Снижает риск ошибки: администратор понимает текущий контекст перед массовыми изменениями. |
5 | Поиск, показ всех и сортировка | Фильтрует сводку назначений, показывает скрытые/пустые элементы и меняет порядок строк. | search, showAll и sortMode находятся в состоянии страницы; showAll и sortMode дополнительно сохраняются в localStorage. | Позволяет быстро найти нужную связку «пользователь–роль–проект» в большой матрице. |
6 | Переключатель представления таблица/дерево | Меняет визуальный способ чтения одной и той же модели назначений. | DashboardPage передаёт данные либо в PivotTable, либо в PivotTree; выбор хранится в localStorage. | Таблица удобна для плотной проверки, дерево — для иерархии и раскрытия групп. |
7 | Команды развернуть/свернуть группы | Открывают или закрывают все группы сводной таблицы. | expanded — Set идентификаторов групп; кнопки массово заполняют или очищают это состояние. | Ускоряет аудит: можно увидеть либо только верхний уровень, либо полный состав назначений. |
8 | Кнопка обновления | Перечитывает данные назначений и связанных разделов. | reloadAll увеличивает refreshTick; эффекты повторно выполняют fan-out запросы api.getProjectAccess и api.getRoleSectionAccess. | Нужно после изменений в других разделах, чтобы сводка не показывала устаревшие данные. |
9 | Панель «Сводная таблица назначений» | Главная рабочая область: показывает связи между пользователями, ролями, проектами и разделами. | Данные собираются из GlobalData и отдельных API-запросов по каждому проекту/роли, затем нормализуются в assignments. | Это единая контрольная точка, где видно кто, где и с какой ролью имеет доступ. |
10 | Критерии группировки | Определяют, что является главным измерением, вторичным измерением и редактируемым полем. | mode и secondaryDim задают структуру строк; editableDim вычисляется как третье измерение из project/user/role. | Позволяет читать одну и ту же матрицу с разных управленческих точек зрения. |
11 | Строки назначений и inline-редактирование | Раскрывают группы, показывают роли и проекты, позволяют менять роль или удалить назначение. | Изменение вызывает api.updateAccess/grantAccess/revokeAccess; клики по интерактивным элементам защищены от случайного выбора строки. | Администратор меняет доступ прямо в контексте найденной строки, без перехода в отдельные карточки. |
12 | Нижняя строка статуса | Показывает количество якорных сущностей и число отображаемых назначений. | Счётчики anchorCount и displayCount пересчитываются после фильтрации и группировки. | Даёт быструю проверку масштаба выборки и помогает понимать, не скрыты ли данные фильтром. |
Приватность: на изображении скрыты имена пользователей, названия проектов и/или чувствительные значения, если они присутствовали на скриншоте.
Иллюстрация 2. Пользователи — реестр идентичностей и назначения
Аннотированная версия: персональные значения в таблицах/полях замаскированы; выноски вынесены за пределы интерфейса.
Подробная легенда
№ | Элемент | Что делает | Как работает | Зачем нужен |
1 | Левое меню | Открывает справочники, управление, обслуживание и информационные разделы. | Sidebar подсвечивает activePage и вызывает onNavigate без перезагрузки. | Постоянная навигация ускоряет администрирование пользователей и доступов. |
2 | Карточки статистики | Показывают всего пользователей, активных, заблокированных, встроенных, администраторов и потребление лицензии. | UsersPage агрегирует список пользователей и статус лицензии через api.getLicenseStatus. | Администратор сразу видит лимиты и состояние базы идентичностей. |
3 | Поиск и сегментированные фильтры | Находит пользователей по логину, имени, email и разделяет всех/активных/заблокированных. | Локальное состояние search/statusFilter фильтрует массив users до рендера таблицы. | Снижает время поиска нужного субъекта и риск редактирования не того пользователя. |
4 | История подключений | Открывает сведения о последних подключениях/клиентских привязках выбранного пользователя. | Компонент вызывает серверные методы для клиентских привязок и отображает их в модальном/боковом представлении. | Нужна для расследований и контроля фактической активности. |
5 | Добавить / удалить | Создаёт новую учётную запись или удаляет выбранную. | createUser/deleteUser вызывают соответствующие API; после операции перезагружается глобальный список. | Позволяет вести реестр пользователей без прямого доступа к базе. |
6 | Сохранить / загрузить | Экспортирует или импортирует базу пользователей. | exportUsersDatabase скачивает файл, importUsersDatabase отправляет FormData на сервер. | Используется для резервного переноса и восстановления справочника. |
7 | Реестр пользователей | Основная таблица пользователей с логином, именем, IP, телефоном, email и статусом. | Данные приходят через GlobalData/users; строки нормализуют поля разных регистров id/Id/login/Login. | Это центральное место выбора субъекта для дальнейших назначений. |
8 | Индикаторы статуса и лицензии | Показывают активен ли пользователь и занимает ли лицензионное место. | Статусы выводятся как badge/иконки; блокировка и активность меняются api.blockUser/unblockUser/activateUser/deactivateUser. | Помогает отличать временно выключенных пользователей от действующих. |
9 | Кнопки действий в строке | Редактируют пользователя, меняют пароль встроенного аккаунта, блокируют/активируют или удаляют. | Обработчики открывают Drawer/Modal и затем вызывают updateUser/changeBuiltInPassword или операции статуса. | Действия расположены рядом со строкой, чтобы операция была адресной. |
10 | Панель доступа к проекту | После выбора пользователя показывает проекты и права, которые ему выданы. | Запрашивает api.getProjectAccess по проектам и фильтрует записи по selectedUser. | Нужна для проверки где пользователь имеет доступ и для отзыва лишних назначений. |
11 | Панель назначения роли | Показывает и редактирует роли пользователя в выбранных проектах. | grantAccess/updateAccess/revokeAccess создают, меняют или удаляют назначение роли. | Разделяет управление личностью и управление проектными полномочиями. |
12 | Пустое состояние панелей | Подсказывает, что для правой части нужно выбрать пользователя. | Панели рендерят EmptyState, пока selectedUser отсутствует. | Не даёт ошибочно воспринимать пустой список как отсутствие прав. |
Приватность: на изображении скрыты имена пользователей, названия проектов и/или чувствительные значения, если они присутствовали на скриншоте.
Иллюстрация 3. Проекты — каталог RS, структура и доступы
Аннотированная версия: персональные значения в таблицах/полях замаскированы; выноски вынесены за пределы интерфейса.
Подробная легенда
№ | Элемент | Что делает | Как работает | Зачем нужен |
1 | Карточки состояния | Суммируют число проектов, серверов RS, неимпортированных проектов и проектов с доступом. | ProjectsPage использует getProjects, getRsInstances и каталог RS для вычисления сводки. | Показывает, насколько синхронизированы локальная база RSG и фактический Revit Server. |
2 | Фильтр по имени или пути | Сужает дерево каталога по названию проекта или пути. | Строка поиска фильтрует локально список catalog/projects перед отображением. | Позволяет быстро найти проект в большом каталоге RS. |
3 | Команды обновить/создать/переименовать/удалить | Обновляют каталог, создают локальную запись проекта, переименовывают или удаляют проект. | Вызываются api.refreshRsCatalog, createProject, updateProject, deleteProject/forceDeleteProject. | Закрывает базовый жизненный цикл проекта в RSG. |
4 | Каталог RS | Показывает проекты, найденные на Revit Server, с группировкой по версиям. | getRsProjects и getRsCatalogStatus читают серверный каталог; импорт создаёт проект в базе RSG. | Нужен, чтобы права выдавались на реальные RS-проекты, а не на произвольные строки. |
5 | Группы Revit Server | Разделяют проекты по версиям/инстансам RS. | Список строится из rsInstanceId/versionYear, полученных с сервера. | Так администратор не путает одинаковые имена в разных версиях Revit Server. |
6 | Структура выбранного проекта | Показывает дерево папок и моделей внутри проекта. | api.getRsCatalogTree(projectId) получает структуру, затем компонент RsTree рендерит иерархию. | Даёт понимание, какие папки можно связать с разделами и удалить при необходимости. |
7 | Кнопки действий структуры | Открывают операции над выбранным элементом: обновление, привязка, удаление элемента. | deleteProjectItem отправляет projectId/path/itemType; другие кнопки меняют состояние выбранной папки. | Позволяет работать не только с проектом целиком, но и с его внутренней структурой. |
8 | Привязки разделов | Связывают папки проекта с дисциплинами/разделами каталога. | getProjectSectionBindings читает текущие связи, updateProjectSectionBindings сохраняет массив bindings. | Нужно, чтобы роль с доступом к разделу автоматически попадала на нужные папки проекта. |
9 | Кнопка «Назначить» | Добавляет выбранный раздел к папке/части проекта. | При нажатии формируется запись привязки sectionCode + folderPath и отправляется в API. | Снижает ручную настройку прав: доступ строится от разделов, а не от отдельных папок. |
10 | Пользователи и роли | Показывает пользователей проекта и их роли. | getProjectAccess(projectId) возвращает назначения; grant/update/revoke меняют связи. | Позволяет сразу проверить, кто имеет проектный доступ. |
11 | Выпадающий список роли | Меняет роль пользователя в выбранном проекте. | updateAccess отправляет новый roleId и флаг администратора проекта. | Даёт адресное изменение прав без перехода на страницу ролей. |
12 | Нижний статус выбранной цели | Показывает текущий выбранный проект и количество элементов. | Состояние selectedProject используется в подписи footer и в правых панелях. | Помогает не потерять контекст при работе с несколькими панелями. |
Приватность: на изображении скрыты имена пользователей, названия проектов и/или чувствительные значения, если они присутствовали на скриншоте.
Иллюстрация 4. Роли — матрица прав по разделам
Аннотированная версия: персональные значения в таблицах/полях замаскированы; выноски вынесены за пределы интерфейса.
Подробная легенда
№ | Элемент | Что делает | Как работает | Зачем нужен |
1 | Карточки статистики ролей | Показывают всего ролей, встроенные, пользовательские, заблокированные и юзеров. | RolesPage рассчитывает значения по списку roles и связанным пользователям. | Позволяет оценить структуру ролевой модели до редактирования. |
2 | Фильтр ролей | Ищет роль по названию. | Фильтр применяется к массиву ролей перед построением строк матрицы. | Нужен при большом числе специализированных ролей. |
3 | Создать / копировать / редактировать | Открывают формы управления ролью. | createRole, updateRole и копирование используют модальные формы с проверками имени и встроенности. | Позволяет расширять типовую матрицу без ручной правки базы. |
4 | Сохранить / сбросить | Сохраняет изменения секционных прав или восстанавливает встроенные роли. | updateRoleSectionAccess отправляет секционные права роли; resetRoles/resetAllRoles/refreshBuiltinRoles возвращают базовый каталог. | Защищает от случайной порчи матрицы и даёт управляемое восстановление. |
5 | Матрица ролей | Главная таблица: каждая строка — роль, каждый столбец — раздел/дисциплина. | Роли приходят из GlobalData; секционные права загружаются через api.getRoleSectionAccess. | Это место, где определяется, какие разделы проекта видит каждая роль. |
6 | Группы разделов | Объединяют дисциплины по блокам проектной/рабочей документации. | Разметка строится из sectionCatalogData и встроенных групп разделов. | Группировка облегчает чтение широкого набора дисциплин. |
7 | Ячейки доступа | Отмечают доступ роли к конкретному разделу. | Клик меняет локальную матрицу roleSectionAccess, затем сохраняется через API. | Позволяет точно собрать полномочия: например, только АР или только ОВ. |
8 | Колонка пользователей и действий | Показывает число пользователей роли и кнопки редактирования/блокировки. | getRoleUsers/getRoleImpact проверяют использование роли; delete может требовать replacement role. | Администратор видит последствия изменения роли до удаления или блокировки. |
9 | Панель пользователей | После выбора роли показывает, кому она назначена. | Правая панель запрашивает связанных пользователей выбранной роли. | Нужна для оценки влияния перед изменением прав. |
10 | Панель проектов | Показывает проекты, где выбранная роль используется. | getRoleImpact возвращает проектные связи и помогает построить список. | Позволяет понимать, какие проекты затронет изменение роли. |
11 | Пустое состояние правых панелей | Сообщает, что нужно выбрать роль. | Пока selectedRole пустой, рендерится EmptyState. | Исключает неверное толкование пустой панели как отсутствия связей. |
12 | Footer статуса | Фиксирует режим чтения/переключения и наличие выбранной роли. | Компонент выводит служебные счётчики и статус selectedRole. | Полезен при длинной прокрутке матрицы. |
Приватность: на изображении скрыты имена пользователей, названия проектов и/или чувствительные значения, если они присутствовали на скриншоте.
Иллюстрация 5. Разделы — каталог дисциплин и привязки
Аннотированная версия: персональные значения в таблицах/полях замаскированы; выноски вынесены за пределы интерфейса.
Подробная легенда
№ | Элемент | Что делает | Как работает | Зачем нужен |
1 | Карточки состояния | Показывают количество разделов, собственных разделов, узлов, привязок и пользователей. | SectionsPage собирает статистику из sections registry и assignment/binding API. | Помогает быстро понять заполненность каталога дисциплин. |
2 | Поиск по разделам | Фильтрует каталог по коду или названию. | Строка поиска локально сокращает список видимых section entries. | Ускоряет поиск дисциплины в длинной матрице. |
3 | Загрузка / сохранение каталога | Импортирует или экспортирует настройки разделов. | Кнопки используют API и JSON/файловый обмен, после операции список обновляется. | Нужно для переноса типового каталога между инсталляциями. |
4 | Создать / удалить / сбросить | Добавляет пользовательский раздел, удаляет или восстанавливает встроенный набор. | create/delete/reset/refresh endpoints меняют каталог и синхронизируют встроенные определения. | Позволяет адаптировать RSG под локальные стандарты компании. |
5 | Каталог разделов | Основная таблица кодов, имён и связанных пользователей. | Данные строятся из sectionCatalogData и серверного /sections registry. | Это справочник дисциплин, на котором строится вся модель прав. |
6 | Коды и иерархия групп | Показывают номера и принадлежность к проектной/рабочей документации. | Группы и коды берутся из встроенного каталога; вложенность визуально разделена строками-заголовками. | Сохраняет связь RSG с привычной структурой проектной документации. |
7 | Наименования разделов | Дают человекочитаемое описание кода. | Названия локализуются через getSectionTitle и labels/sectionCatalog. | Администратор видит смысл кода без обращения к отдельной таблице. |
8 | Счётчик пользователей | Показывает сколько пользователей затронуто разделом. | getSectionAssignments или рассчитанные связи показывают использование секции. | Помогает понять влияние изменения раздела. |
9 | Панель структуры проекта | После выбора раздела показывает папки проекта, которые можно к нему привязать. | getRsCatalogTree и getProjectSectionBindings читают дерево и существующие bindings. | Позволяет связать дисциплину с реальными папками RS. |
10 | Панель списка доступа | Показывает пользователей, получающих доступ через выбранный раздел. | getSectionAssignments возвращает пользователей/проекты/роли для секционного доступа. | Даёт контроль последствий: кто фактически получит права. |
11 | Пустое состояние | Сообщает, что нужно выбрать раздел. | До выбора раздела right panels показывают EmptyState с подсказкой. | Предотвращает путаницу между пустым результатом и невыбранным контекстом. |
12 | Скролл и итоговая строка | Показывает глубину списка и статус матрицы. | Таблица прокручивается внутри панели, footer хранит служебную подпись. | Удобно для длинных каталогов: заголовки и контекст остаются читаемыми. |
Приватность: на изображении скрыты имена пользователей, названия проектов и/или чувствительные значения, если они присутствовали на скриншоте.
Иллюстрация 6. Шлюзы RS — управление прокси и защитой
Аннотированная версия: персональные значения в таблицах/полях замаскированы; выноски вынесены за пределы интерфейса.
Подробная легенда
№ | Элемент | Что делает | Как работает | Зачем нужен |
1 | Карточки состояния | Показывают количество версий RS, состояние proxy, число защищённых и обнаруженных версий. | GatewaysPage получает статус через getProxyGateways и getLicenseStatus. | Администратор сразу видит, работает ли защитный контур. |
2 | Маршрут gateway API | Показывает URL, через который админ-панель обращается к шлюзам. | Поле строится из базового host/endpoint; копирование использует значение маршрута. | Нужно для диагностики связи между UI и backend/proxy. |
3 | Публичный и внутренний host | Задают внешний адрес и внутреннюю точку, куда перенаправляется трафик. | Поля сохраняются в shared proxy settings через updateProxyGatewayShared/updateProxyGateway. | Разделяет адрес для клиентов и локальный адрес службы. |
4 | Порты внешнего, внутреннего и admin канала | Определяют сетевые входы proxy и административного интерфейса. | После редактирования применяются настройки proxy; при необходимости patchRevitServerPort меняет RS-конфигурацию. | Нужно, чтобы proxy не конфликтовал с IIS/Revit Server и мог перехватывать доступ. |
5 | Пути исполняемого файла, баз и логов | Показывают откуда запускается proxy и где лежат базы/логи. | Пути задаются установщиком или конфигурацией; UI обычно читает их как справочную информацию. | Помогает диагностировать сервис без ручного поиска файлов на сервере. |
6 | Команды обновить/применить/старт/стоп | Управляют чтением настроек и жизненным циклом proxy. | Кнопки вызывают refresh, updateProxyGateway, startProxyGateway, stopProxyGateway/restart. | Администратор может управлять защитой без захода в службы Windows. |
7 | Строка состояния proxy | Показывает запущен или остановлен proxy. | Статус приходит с сервера и обновляется после команд управления. | Даёт быстрый контроль: защита может быть настроена, но не запущена. |
8 | Журнал прокси | Показывает последние строки лога proxy. | getProxyGatewayLog читает последние N строк и выводит их в консольную панель. | Нужна для быстрой диагностики ошибок запуска и маршрутизации. |
9 | Матрица защиты по версиям RS | Показывает, для каких версий Revit Server включена защита. | Каждая версия имеет отдельный профиль; updateProxyGateway сохраняет состояние protected/enabled. | Позволяет независимо включать защиту для RS 2021–2027. |
10 | Кнопка детекта | Проверяет доступность конкретной версии RS и диагностирует ответы. | Запускается probe/detect endpoint; UI показывает коды ответов host/admin/rest. | Нужно, чтобы проверить корректную маршрутизацию перед включением защиты. |
11 | Сохранить / загрузить | Экспортирует и импортирует настройки gateway/proxy. | exportProxyGatewaySettings и importProxyGatewaySettings обмениваются профилями конфигурации. | Удобно для переноса на другой сервер и резервного восстановления. |
12 | Footer портов | Показывает ключевые порты текущего профиля. | Строка берёт актуальные значения из state после загрузки настроек. | Служит контрольной сверкой после изменения портов. |
Приватность: на изображении скрыты имена пользователей, названия проектов и/или чувствительные значения, если они присутствовали на скриншоте.
Иллюстрация 7. Бэкапы — сетка резервного копирования проектов
Аннотированная версия: персональные значения в таблицах/полях замаскированы; выноски вынесены за пределы интерфейса.
Подробная легенда
№ | Элемент | Что делает | Как работает | Зачем нужен |
1 | Карточки состояния | Показывают количество проектов, настроенных, включённых, запусков, успешных и неудачных бэкапов. | BackupPage агрегирует getBackupStatus/getBackupHistory по проектам. | Даёт быстрый контроль качества резервного копирования. |
2 | Сетка проектов и настроек | Основная таблица всех проектов, для которых можно настроить бэкап. | Проекты берутся из GlobalData; статусы бэкапа подгружаются отдельно по каждому projectId. | Централизует бэкапы всех RS-проектов в одном экране. |
3 | Группы Revit Server | Разделяют проекты по версиям/инстансам RS. | Группировка вычисляется по metadata проекта и связанному rsInstance. | Удобно проверять покрытие бэкапами по каждой версии Revit Server. |
4 | Путь бэкапа | Показывает каталог назначения резервной копии или отсутствие настройки. | updateBackupSettings сохраняет путь в настройках проекта. | Без пути бэкап нельзя надёжно запустить; это ключевой параметр хранения. |
5 | Расписание | Показывает периодичность автоматического резервного копирования. | Настройки расписания отправляются через updateBackupSettings и затем используются фоновым BackupJob. | Снимает зависимость от ручных запусков и уменьшает риск потери данных. |
6 | Последний бэкап | Показывает дату/время последнего выполненного копирования. | getBackupHistory возвращает историю; последняя запись выводится в таблице. | Позволяет сразу понять, актуальна ли защита проекта. |
7 | Статус | Отражает готовность/ошибку/выполнение резервного копирования. | getBackupStatus возвращает текущее состояние и прогресс. | Администратор видит проблемные проекты без открытия каждой карточки. |
8 | Кнопка «Запустить» | Запускает резервное копирование выбранного проекта вручную. | runBackup(projectId, incremental) отправляет команду backend и обновляет статус. | Нужна для срочного копирования перед опасными операциями. |
9 | Кнопка настроек | Открывает параметры бэкапа конкретного проекта. | Drawer/Modal заполняется текущими settings и сохраняет их через updateBackupSettings. | Параметры редактируются адресно, рядом с нужным проектом. |
10 | Вертикальная прокрутка | Позволяет работать со многими проектами без перегрузки страницы. | Таблица прокручивается внутри панели, шапка и контекст остаются сверху. | Масштабирует интерфейс на большие каталоги проектов. |
11 | Навигация обслуживания | Показывает, что экран относится к обслуживанию, а не справочникам. | Группа меню «Обслуживание» содержит «Бэкапы». | Помогает отделить регулярные сервисные операции от настройки прав. |
12 | Footer записей | Показывает служебный итог по настройкам/строкам. | Счётчики формируются из отфильтрованного списка и статусов. | Даёт контроль полноты отображаемого списка. |
Приватность: на изображении скрыты имена пользователей, названия проектов и/или чувствительные значения, если они присутствовали на скриншоте.
Иллюстрация 8. Журнал аудита — поток событий и экспорт
Аннотированная версия: персональные значения в таблицах/полях замаскированы; выноски вынесены за пределы интерфейса.
Подробная легенда
№ | Элемент | Что делает | Как работает | Зачем нужен |
1 | Карточки журнала | Показывают всего событий, текущую страницу, отображаемые строки, активный фильтр, запрос и отказы. | AuditPage вызывает api.getAuditLog с query/action/page/pageSize и строит сводные значения. | Позволяет понять масштаб журнала и активность фильтров. |
2 | Индикатор live-потока | Показывает, что журнал открыт в режиме актуального наблюдения. | Страница периодически обновляет или повторно запрашивает лог; статус выводится в верхней панели. | Администратор видит новые события без ручного поиска. |
3 | Экспорт PDF/XLSX | Выгружает журнал в отчётный формат. | api.exportReport формирует файл на сервере, UI скачивает blob. | Нужен для передачи аудита руководству или вложения в акт расследования. |
4 | Поиск по пользователю | Фильтрует события по субъекту. | Значение поля попадает в параметры api.getAuditLog. | Сужает расследование до конкретного пользователя. |
5 | Фильтр действия | Показывает все действия или выбранный тип. | Select меняет action filter; запрос к API возвращает только нужные события. | Позволяет отдельно анализировать выдачу доступа, отзыв, создание, обновление и т.п. |
6 | Таблица потока событий | Основная область журнала: каждая строка — событие. | Результаты getAuditLog мапятся в строки с колонками time/user/action/type/object/details/ip. | Фиксирует кто, когда и что сделал в системе. |
7 | Колонка времени | Показывает дату и время события. | Время форматируется на клиенте из timestamp сервера. | Нужно для восстановления последовательности действий. |
8 | Колонка пользователя | Показывает инициатора события. | user/login берётся из AuditLogEntry; при отсутствии показывается технический прочерк. | Даёт ответ на вопрос «кто изменил доступ». Имена в итоговом документе замаскированы. |
9 | Колонка действия | Человекочитаемая метка события. | ACTION_LABELS и локализация переводят внутренний код AuditAction. | Упрощает чтение журнала без знания серверных enum. |
10 | Тип и объект | Показывает тип сущности и идентификатор объекта. | Поля objectType/objectId приходят с backend. | Помогает открыть связанную сущность в проектах, ролях или пользователях. |
11 | Детали | Содержит дополнительные параметры события. | Строка деталей формируется сервером; для чувствительных значений в документе применена маскировка. | Позволяет понять, какие именно параметры были изменены. |
12 | Колонка IP | Показывает адрес клиента или прочерк. | IP берётся из записи аудита, если доступен. | Нужна для технического расследования и выявления внешних подключений. |
Приватность: на изображении скрыты имена пользователей, названия проектов и/или чувствительные значения, если они присутствовали на скриншоте.
Иллюстрация 9. Статистика — аналитика активности и отчёты
Аннотированная версия: персональные значения в таблицах/полях замаскированы; выноски вынесены за пределы интерфейса.
Подробная легенда
№ | Элемент | Что делает | Как работает | Зачем нужен |
1 | Hero-метрики | Показывают период, число проектов, пользователей, ролей, типов действий и событий. | StatsPage параллельно вызывает getProjectStats, getUserStats, getRoleStats и getActionStats. | Даёт быстрый обзор активности за выбранный период. |
2 | Переключатель периода | Меняет окно анализа: 7, 14 или 3 месяца. | period хранится в состоянии; from вычисляется как текущая дата минус periodDays. | Позволяет сравнивать короткий и более длинный период активности. |
3 | Экспорт PDF/XLSX | Скачивает сводный отчёт статистики. | handleExport вызывает api.exportReport("statistics", format, from). | Используется для регулярных управленческих отчётов. |
4 | Выбор проекта для Excel | Задаёт проект, по которому нужно выгрузить активность моделей. | selectedProjectId заполняется из GlobalData.projects; значение передаётся в exportProjectModelActivity. | Позволяет получать детальный отчёт по моделям конкретного проекта. |
5 | Кнопка «Выгрузить Excel» | Создаёт Excel с моделями выбранного проекта и последними изменениями. | api.exportProjectModelActivity(projectId) возвращает blob, который скачивается как.xlsx. | Нужно для BIM-администраторов при анализе файловой активности. |
6 | График по проектам | Показывает количество действий по проектам. | Recharts строит bar chart на данных projectStats. | Позволяет быстро увидеть самые активные проекты. |
7 | Диаграмма по ролям | Показывает распределение активности или назначений по ролям. | roleStats выводится в PieChart/Donut с цветами из PIE_COLORS. | Помогает понять какие роли реально используются. |
8 | Блок активных пользователей | Показывает лидеров активности либо пустое состояние. | userStats сортируется по count; если данных нет, рендерится EmptyState. | Делает видимой реальную вовлечённость пользователей. |
9 | Распределение действий | Показывает доли разных типов событий. | actionStats преобразуется в donut chart; подписи берутся из ACTION_LABELS. | Указывает, какие операции преобладают: выдача, отзыв, обновление и т.д. |
10 | Легенда графика | Расшифровывает цвета типов действий. | Recharts Legend получает список action labels и цвета. | Позволяет читать диаграмму без наведения курсора. |
11 | Footer статистики | Показывает период и итог событий. | Нижняя строка использует totalActions и выбранный период. | Даёт проверочный итог для отчёта. |
12 | Навигация информационного блока | Показывает, что статистика относится к разделу информации. | Пункт «Статистика» активен в Sidebar. | Отделяет аналитику от операций изменения данных. |
Приватность: на изображении скрыты имена пользователей, названия проектов и/или чувствительные значения, если они присутствовали на скриншоте.
Иллюстрация 10. Конфигурация — системные настройки, лицензия и внешний вид
Аннотированная версия: персональные значения в таблицах/полях замаскированы; выноски вынесены за пределы интерфейса.
Подробная легенда
№ | Элемент | Что делает | Как работает | Зачем нужен |
1 | Карточки состояния системы | Показывают статус лицензии, базы, ролей, пользователей, проектов и режима доступа. | ConfigPage вызывает getLicenseStatus/getDatabaseInfo и использует GlobalData. | Даёт административную сводку перед изменением настроек. |
2 | Версия и время | Показывают версию RSG и текущее время/дату сборки интерфейса. | Значения рендерятся в верхней части конфигурации рядом со статус-картами. | Нужно для поддержки: сразу видно, какую версию смотрит пользователь. |
3 | Информация о системе | Показывает числовые параметры: роли, пользователи, проекты и подключение Revit Server. | Данные берутся из global state и статусов backend. | Помогает проверить, что админ-панель связана с сервером и базой. |
4 | Пути и каталоги | Показывает расположение базы RSG, proxy database и каталогов логов. | Пути читаются из серверной конфигурации; редактирование через UI ограничено, чтобы не нарушить установку. | Администратор видит техническую конфигурацию без доступа к серверному файлу appsettings. |
5 | Кнопка обновления путей | Перечитывает системные сведения. | Вызывает backend API для обновления database/config info и перерисовывает панель. | Нужна после установки, миграции или ручного изменения конфигурации. |
6 | Выбор эмблемы боковой панели | Позволяет выбрать один из вариантов логотипа. | Выбранный variant сохраняется в localStorage rsg-sidebar-logo и передаётся через SidebarLogoContext. | Даёт настройку внешнего вида без перекомпиляции приложения. |
7 | Панель цвета и темы | Настраивает акцент, фон, заголовки, масштаб шрифта и тени панелей. | CSS-переменные строятся из выбранных hex и применяются на root; значения хранятся в localStorage. | Позволяет адаптировать интерфейс под рабочее место и презентационный стиль. |
8 | Панель лицензии RSG | Показывает активность лицензии, срок и данные заказчика. | getLicenseStatus читает статус, installLicense/removeLicense/activation endpoints меняют лицензию. | Управляет правом использования системы и лимитами. |
9 | Параметры лицензии | Выбирают срок, лимит пользователей, количество лицензий и версии Revit Server. | UI мапит duration/user tier/version flags в модель LicenseRequest/LicenseStatus. | Позволяет сформировать корректную лицензионную заявку. |
10 | Стоимость и действия лицензии | Показывает расчёт стоимости и кнопки новая/продлить/активировать. | mapDatesToDurationCode, mapMaxUsersToTier и серверный license service формируют запрос/установку. | Связывает коммерческие параметры с технической активацией. |
11 | Пароль учётной записи | Меняет пароль текущей встроенной учётной записи. | changeBuiltInPassword отправляет текущий и новый пароль; пустой новый пароль может удалить пароль. | Даёт администратору управление доступом к самой панели. |
12 | кнопки сохранения пароля | Сохраняют новый пароль или удаляют существующий. | Обработчик валидирует совпадение полей и вызывает API смены пароля. | Предотвращает случайное расхождение пароля и подтверждения. |
Хотите изучить вторую часть документации?
Перейти к комплексному анализу →