Files
MABEA/backend
patrickandClaude Sonnet 5 654d448e7b
CI / backend-tests (push) Failing after 2m17s
CI / frontend-build (push) Successful in 28s
feat(dokumente): DOC-005 Zugriffsrechte je Dokumenttyp (Rechnungen eingeschränkt)
Rechnungen sind finanziell sensibel - nur Materialverantwortliche/
Leitungsverantwortliche/Administration dürfen sie in der Liste sehen und
herunterladen (403 bei direktem Downloadversuch), Mitarbeiter nicht.
Hochladen bleibt für alle offen (z.B. Wareneingang direkt scannen). Andere
Dokumenttypen bleiben unverändert für jeden mit Aktenzugriff sichtbar - die
werden im Feldeinsatz gebraucht. EINGESCHRAENKTE_DOKUMENTTYPEN als zentrale
Stelle für künftige weitere Einschränkungen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-08 10:39:42 +02:00
..

MABEA Backend Sprint 0

FastAPI-Skeleton, Datenbankschema (Alembic), Auth (JWT), Rollen-Dependency. Details: ergebnisse/sprintplan.md, ergebnisse/19_technische_architektur.md, ergebnisse/20_datenbank_schema.md.

Setup (auf dem Zielsystem, nicht lokal)

python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

cp example.env .env
# .env editieren: DATABASE_URL, JWT_SECRET_KEY, SYSTEMKNOTEN_ID

alembic upgrade head
uvicorn app.main:app --host 0.0.0.0 --port 8000

Tests (CI oder Zielsystem)

pytest

Erwartet eine per Alembic migrierte PostgreSQL-Test-Datenbank (DATABASE_URL zeigt darauf). CI-Workflow: .gitea/workflows/ci.yml.

Struktur

  • app/core/app_settings.py Konfiguration aus Umgebungsvariablen
  • app/core/security.py Passwort-Hashing, JWT
  • app/db/ SQLAlchemy Engine/Session
  • app/models/ ORM-Modelle (Sprint 0: nur Auth-relevante Tabellen; weitere Modelle folgen Sprint 1+)
  • app/api/ FastAPI-Router, Dependencies (u.a. require_roles für Prompt-05-Berechtigungsmatrix)
  • alembic/versions/0001_initial_schema.py vollständiges Ziel-Schema (Prompt 20), auch für Tabellen, die erst spätere Sprints per API befüllen
  • alembic/versions/0002_seed_hauptserver.py Sprintplan E6: seedet den einen systemknoten-Datensatz (typ='haupt')