banyaro/backend/static/js
rene 35937ed51b Bündel 3: Security-Helper + Demo-Migration, SW by-v1115
NEUE HELPER in auth.py:

require_moderator(user=Depends(get_current_user))
  Konsequente Dependency statt inline
  'if user["rolle"] not in ("admin", "moderator")'

require_breeder(user=Depends(get_current_user))
  Konsequente Dependency statt inline
  'if user["subscription_tier"] not in ("breeder", "breeder_test")'

require_owner(row, user, owner_field='user_id',
              not_found_msg, forbidden_msg) -> row
  Zentralisiert das häufigste Pattern (54 Stellen im Audit):
  Statt:
    row = conn.execute(...).fetchone()
    if not row: raise HTTPException(404, ...)
    if row['user_id'] != user['id']: raise HTTPException(403, ...)
  Jetzt:
    row = require_owner(conn.execute(...).fetchone(), user,
                        not_found_msg='Ort nicht gefunden.')

is_owner_or_admin(row, user, owner_field='user_id') -> bool
  True wenn Owner ODER Admin/Moderator (Admin-Override für
  Moderations-Endpoints)

DEMO-MIGRATION:
places.py PATCH /places/{id} + DELETE /places/{id} migriert auf
require_owner() — als Style-Referenz für künftige Migrationen.

KEINE Massen-Migration der 54 Stellen — bewusste Entscheidung
weil security-kritisch. Helper sind bereitgestellt, neuer Code
nutzt sie, bestehender bleibt funktional identisch.

Tests 19/19 grün.

Hinweis: Massen-Migration der Owner-Checks ist eigener Sprint mit
sehr sorgfältigem Testing — bei jeder migrierten Route muss die
404→403→Cascade durchgeprüft werden, dass Owner+Non-Owner+Admin
sich identisch zum Vorher verhalten.
2026-05-27 11:27:00 +02:00
..
pages Refactor: 1167 _esc() → UI.escape() in 36 Dateien, SW by-v1113 2026-05-27 10:15:33 +02:00
api.js Perf: 9 Performance-Fixes — SW by-v1072 2026-05-26 06:30:36 +02:00
app.js Bündel 3: Security-Helper + Demo-Migration, SW by-v1115 2026-05-27 11:27:00 +02:00
boot-early.js Security: CSP gehärtet — unsafe-inline + unsafe-eval raus, SW by-v1100 2026-05-27 06:23:47 +02:00
boot.js Security: CSP gehärtet — unsafe-inline + unsafe-eval raus, SW by-v1100 2026-05-27 06:23:47 +02:00
landing-init.js Security: CSP gehärtet — unsafe-inline + unsafe-eval raus, SW by-v1100 2026-05-27 06:23:47 +02:00
leaflet.js leaflet.js: Attribution-Control-Hook deaktiviert 2026-04-12 18:17:19 +02:00
leaflet.markercluster.js Sprint 10: OSM-POI-Cache, Karten-Clustering, Routen-Redesign 2026-04-15 16:30:10 +02:00
offline-indicator.js Bündel A-D: Race-Fixes, JWT-Cleanup, Storage-Watchdog, HTTPException, SW by-v1112 2026-05-27 09:41:56 +02:00
qrcode.min.js Feature: QR-Code mit Logo im Referral-Block — SW by-v441, APP_VER 420 2026-04-27 06:23:01 +02:00
ui.js Bündel 2: Zentrale Helper für DRY-Cleanup, SW by-v1114 2026-05-27 11:19:06 +02:00
worlds.js UX: Übung des Tages zeigt 'Stand erfassen →' statt '--' wenn kein Stand 2026-05-19 18:41:44 +02:00