c45236651b
- 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>
2.1 KiB
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}-admingroup for every registered service if absent.features/ai-service/app/routers/plugin.py—GET /plugin/manifestfor ai-service (exposes access rules:ai-service-admingroup).frontend/src/pages/DocServiceSettingsPage.tsx— Combined doc-service settings page: Upload Limits + Watch Directory (rendered viaPluginSchemaForm).
Files Modified
backend/app/main.py— Lifespan now callsensure_service_admin_groups(db)afterregister_services().backend/app/deps.py— Addedget_service_admin(service_id)factory dependency: grants access to superusers or{service_id}-admingroup members; returns 404 otherwise.backend/app/routers/settings.py— AI settings (/ai,/ai/test,/system-prompts) and doc limits (/documents/limits) now useget_service_admin(...)instead ofget_current_admin— service group members can access them.backend/app/services/service_health.py—settings_pathfor doc-service changed to/apps/documents/settings; ai-service to/apps/ai/settings(removed/adminsuffix).features/ai-service/app/main.py— Mounts newplugin.routerso backend poller can discover ai-service manifest.frontend/src/App.tsx— AddedServiceAdminRoutecomponent (checks token + is_admin OR plugin list contains serviceId). Updated doc/AI settings routes to new paths underServiceAdminRoute.frontend/src/pages/AppsPage.tsx— Replaced two-button layout (Settings + Extension) with single Settings button; visible whenuser.is_admin || pluginIds.has(svc.id).backend/STATUS.md,frontend/STATUS.md,CLAUDE.md— Updated to reflect all changes above.