Files
Business-Management/changelog/2026-04-18_service-admin-groups-combined-settings.md
curo1305 c45236651b Add service admin groups, combined settings pages, single Settings button
- Auto-create {service-id}-admin groups at startup (group_bootstrap.py)
- get_service_admin() dep: grants access to superusers OR service group members
- /api/settings/ai and /api/settings/documents/limits now allow service admins
- AI service exposes /plugin/manifest (ai-service-admin access group)
- DocServiceSettingsPage: combined upload limits + watch directory on one page
- ServiceAdminRoute in frontend guards new /apps/documents/settings and /apps/ai/settings
- Single Settings button per app card (visible to admins and service group members)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 02:49:57 +02:00

2.1 KiB

2026-04-18 — Service admin groups + combined settings pages

Timestamp: 2026-04-18T00:00:00Z

Summary

Introduced per-service admin groups that are auto-created at startup, consolidated doc-service and AI-service settings each onto a single page, and collapsed the dual "Settings + Extension" app card buttons into one Settings button visible to admins and service-group members.

Files Added

  • backend/app/services/group_bootstrap.py — Idempotent startup task: creates {service_id}-admin group for every registered service if absent.
  • features/ai-service/app/routers/plugin.pyGET /plugin/manifest for ai-service (exposes access rules: ai-service-admin group).
  • frontend/src/pages/DocServiceSettingsPage.tsx — Combined doc-service settings page: Upload Limits + Watch Directory (rendered via PluginSchemaForm).

Files Modified

  • backend/app/main.py — Lifespan now calls ensure_service_admin_groups(db) after register_services().
  • backend/app/deps.py — Added get_service_admin(service_id) factory dependency: grants access to superusers or {service_id}-admin group members; returns 404 otherwise.
  • backend/app/routers/settings.py — AI settings (/ai, /ai/test, /system-prompts) and doc limits (/documents/limits) now use get_service_admin(...) instead of get_current_admin — service group members can access them.
  • backend/app/services/service_health.pysettings_path for doc-service changed to /apps/documents/settings; ai-service to /apps/ai/settings (removed /admin suffix).
  • features/ai-service/app/main.py — Mounts new plugin.router so backend poller can discover ai-service manifest.
  • frontend/src/App.tsx — Added ServiceAdminRoute component (checks token + is_admin OR plugin list contains serviceId). Updated doc/AI settings routes to new paths under ServiceAdminRoute.
  • frontend/src/pages/AppsPage.tsx — Replaced two-button layout (Settings + Extension) with single Settings button; visible when user.is_admin || pluginIds.has(svc.id).
  • backend/STATUS.md, frontend/STATUS.md, CLAUDE.md — Updated to reflect all changes above.