fix(nextcloud-files): CR-02 Nextcloud-Adresse aendern nur noch Administratoren

- PUT settings traegt @Roles(ADMIN, SUPER_ADMIN) statt @ModuleManage (Muster wie
  TendersController.getSourceConfig); alle Benutzer schicken ihr Passwort an diese Adresse
- POST settings/test: Verwalter ohne Administratorrolle pruefen nur die gespeicherte Adresse,
  jede andere Adresse ist 403
- Einstellungen fuer Verwalter nur lesbar mit kurzem Hinweis, ohne Speichern-Knopf; Hinweis
  "nicht eingerichtet" verweist Nicht-Administratoren an einen Administrator
- Metadaten-Spec (module-manage-handlers), Controller-Spec, Seitentest, e2e-settings
  (Verwalter: 403 auf PUT und fremde Pruefung), Anleitungen und Changelog angepasst

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-08 22:31:06 +02:00
parent 5c2d327bef
commit e78e059477
12 changed files with 187 additions and 37 deletions
@@ -66,4 +66,29 @@ e2e_second_user e2euser "$UJAR"
code=$(e2e_status "$UJAR" GET "$S/settings")
case "$code" in 403|404) ;; *) e2e_fail "Benutzer ohne Freigabe: GET settings erwartet 403/404, war $code" ;; esac
# CR-02: die Adresse legt nur ein Administrator fest. Ein Benutzer mit der Freigabestufe Verwalten
# (ohne Administratorrolle) liest die Einstellungen und prueft die GESPEICHERTE Adresse, darf
# aber nichts aendern und keine andere Adresse pruefen.
MJAR="$E2E_TMP/manager.jar"
e2e_second_user e2emanager "$MJAR"
e2e_status "$JAR" GET "$API/users" "" "$E2E_TMP/users.out" >/dev/null
MID=$(python3 -I -c 'import json,sys
print([u["id"] for u in json.load(open(sys.argv[1])) if u["username"]=="e2emanager"][0])' "$E2E_TMP/users.out")
e2e_status "$JAR" GET "$API/modules/catalog" "" "$E2E_TMP/catalog.out" >/dev/null
MODID=$(python3 -I -c 'import json,sys
print([m["id"] for m in json.load(open(sys.argv[1])) if m["slug"]=="nextcloud-files"][0])' "$E2E_TMP/catalog.out")
code=$(e2e_status "$JAR" POST "$API/module-grants" "{\"moduleId\":\"$MODID\",\"userId\":\"$MID\",\"level\":\"MANAGE\"}")
case "$code" in 200|201|409) ;; *) e2e_fail "Freigabe Verwalten fuer e2emanager -> $code" ;; esac
code=$(e2e_status "$MJAR" GET "$S/settings")
e2e_expect 200 "$code" "Verwalter: GET settings"
code=$(e2e_status "$MJAR" PUT "$S/settings" '{"baseUrl":"http://172.17.0.1:18081","confirmReconnect":true}')
e2e_expect 403 "$code" "Verwalter: PUT settings (nur Administratoren)"
code=$(e2e_status "$MJAR" POST "$S/settings/test" '{"baseUrl":"http://172.17.0.1:1"}')
e2e_expect 403 "$code" "Verwalter: andere Adresse pruefen"
code=$(e2e_status "$MJAR" POST "$S/settings/test" "{\"baseUrl\":\"$NC_BASE\"}")
e2e_expect 200 "$code" "Verwalter: gespeicherte Adresse pruefen"
e2e_contains "$E2E_TMP/body.out" '"ok":true' "Verwalter: Pruefung ok"
code=$(e2e_status "$JAR" GET "$S/settings")
e2e_contains "$E2E_TMP/body.out" '"baseUrl":"http://172.17.0.1:18080"' "Adresse unveraendert"
echo "e2e settings ok"