feat(rmm): add admin UI for RMM connections, device mappings, alert rules #211

Merged
vas2000-work merged 1 commit from feat/mapps-199-rmm-admin-ui into main 2026-06-16 23:49:04 +02:00
Owner

Adds the missing frontend for the RMM integration subsystem whose backend shipped under PMS-102/103/104/105 but had no UI. Three admin-gated surfaces live under the Settings hub in a new "Integrations" group, each wired to the existing server CRUD routes:

  • Connections: list / create / edit / delete plus a "Test connection" action (GET/POST /rmm/connections, GET/PUT/DELETE /rmm/connections/{id}, POST /rmm/connections/{id}/test). The provider dropdown is limited to the supported RmmProvider variants (tactical_rmm, mesh_central, datto, connectwise, ninja_rmm) and is immutable on edit to match the server UpdateRmmConnectionRequest, which has no provider field.
  • Device mappings: list / create / delete (GET/POST /rmm/device-mappings, DELETE /rmm/device-mappings/{id}), linking a monitored device to an optional asset and company via the shared pickers.
  • Alert rules: list / create / delete (GET/POST /rmm/alert-rules, DELETE /rmm/alert-rules/{id}).

Provider credentials (api_key / api_secret) are write-only: the server RmmConnectionResponse never echoes them, so the form only ever sends them and leaving them blank on edit keeps the stored values (mirrors the PMS-342 credential-vault pattern). Every page re-checks use_is_admin() and renders the AdminOnlyNotice for non-admins, matching the server RequireAdmin on these routes. Reuses the existing settings CRUD conventions (page-local Deserialize rows, active_tenant_generation() re-fetch, SettingFormModal chrome, shared opt_str / delete_lookup helpers).

#MAPPS-199

Adds the missing frontend for the RMM integration subsystem whose backend shipped under PMS-102/103/104/105 but had no UI. Three admin-gated surfaces live under the Settings hub in a new "Integrations" group, each wired to the existing server CRUD routes: - Connections: list / create / edit / delete plus a "Test connection" action (`GET/POST /rmm/connections`, `GET/PUT/DELETE /rmm/connections/{id}`, `POST /rmm/connections/{id}/test`). The provider dropdown is limited to the supported `RmmProvider` variants (tactical_rmm, mesh_central, datto, connectwise, ninja_rmm) and is immutable on edit to match the server `UpdateRmmConnectionRequest`, which has no provider field. - Device mappings: list / create / delete (`GET/POST /rmm/device-mappings`, `DELETE /rmm/device-mappings/{id}`), linking a monitored device to an optional asset and company via the shared pickers. - Alert rules: list / create / delete (`GET/POST /rmm/alert-rules`, `DELETE /rmm/alert-rules/{id}`). Provider credentials (api_key / api_secret) are write-only: the server `RmmConnectionResponse` never echoes them, so the form only ever sends them and leaving them blank on edit keeps the stored values (mirrors the PMS-342 credential-vault pattern). Every page re-checks `use_is_admin()` and renders the AdminOnlyNotice for non-admins, matching the server `RequireAdmin` on these routes. Reuses the existing settings CRUD conventions (page-local Deserialize rows, `active_tenant_generation()` re-fetch, SettingFormModal chrome, shared opt_str / delete_lookup helpers). #MAPPS-199
feat(rmm): add admin UI for RMM connections, device mappings, alert rules
All checks were successful
Check / clippy + fmt + tests (pull_request) Successful in 58s
Create release / Create release from merged PR (pull_request) Has been skipped
7268a92a4d
Adds the missing frontend for the RMM integration subsystem whose backend shipped under PMS-102/103/104/105 but had no UI. Three admin-gated surfaces live under the Settings hub in a new "Integrations" group, each wired to the existing server CRUD routes:

- Connections: list / create / edit / delete plus a "Test connection" action (`GET/POST /rmm/connections`, `GET/PUT/DELETE /rmm/connections/{id}`, `POST /rmm/connections/{id}/test`). The provider dropdown is limited to the supported `RmmProvider` variants (tactical_rmm, mesh_central, datto, connectwise, ninja_rmm) and is immutable on edit to match the server `UpdateRmmConnectionRequest`, which has no provider field.
- Device mappings: list / create / delete (`GET/POST /rmm/device-mappings`, `DELETE /rmm/device-mappings/{id}`), linking a monitored device to an optional asset and company via the shared pickers.
- Alert rules: list / create / delete (`GET/POST /rmm/alert-rules`, `DELETE /rmm/alert-rules/{id}`).

Provider credentials (api_key / api_secret) are write-only: the server `RmmConnectionResponse` never echoes them, so the form only ever sends them and leaving them blank on edit keeps the stored values (mirrors the PMS-342 credential-vault pattern). Every page re-checks `use_is_admin()` and renders the AdminOnlyNotice for non-admins, matching the server `RequireAdmin` on these routes. Reuses the existing settings CRUD conventions (page-local Deserialize rows, `active_tenant_generation()` re-fetch, SettingFormModal chrome, shared opt_str / delete_lookup helpers).

#MAPPS-199
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/mokosh-apps!211
No description provided.