# LandveX User Management API FastAPI-baserad adminbackend för användarhantering med PostgreSQL. ## Funktioner - **CRUD för användare** — skapa, läsa, uppdatera, ta bort - **Roller** — `admin`, `manager`, `analyst`, `viewer` med hierarkisk åtkomstkontroll - **JWT-auth** — access token + refresh token - **Lösenordshantering** — bcrypt-hashning, lösenordsbyte - **Inbjudningsflöde** — skicka inbjudan → acceptera via token → sätt lösenord - **Tenant-stöd** — flerklientsisolering - **Alembic-migrationer** — databasversionshantering ## Snabbstart ```bash cd landvex/user-management python -m venv .venv source .venv/bin/activate pip install -r requirements.txt # Kopiera env-fil cp .env.example .env # Kör migrationer alembic upgrade head # Starta server uvicorn app.main:app --reload ``` ## API-endpoints | Metod | Endpoint | Beskrivning | Rollkrav | |-------|----------|-------------|----------| | POST | `/api/v1/auth/login` | Logga in | Öppen | | POST | `/api/v1/auth/refresh` | Förnya access token | Öppen | | GET | `/api/v1/auth/me` | Aktuell användare | Inloggad | | POST | `/api/v1/auth/change-password` | Byt lösenord | Inloggad | | GET | `/api/v1/users` | Lista användare | Manager+ | | GET | `/api/v1/users/{id}` | Hämta användare | Inloggad | | POST | `/api/v1/users` | Skapa användare | Admin+ | | PATCH | `/api/v1/users/{id}` | Uppdatera användare | Inloggad (egen eller lägre roll) | | DELETE | `/api/v1/users/{id}` | Ta bort användare | Admin+ | | GET | `/api/v1/invitations` | Lista inbjudningar | Manager+ | | POST | `/api/v1/invitations` | Skapa inbjudan | Admin+ | | GET | `/api/v1/invitations/validate/{token}` | Validera inbjudan | Öppen | | POST | `/api/v1/invitations/accept` | Acceptera inbjudan | Öppen | | DELETE | `/api/v1/invitations/{id}` | Återkalla inbjudan | Admin+ | | GET | `/api/v1/tenants` | Lista tenants | Admin+ | | GET | `/api/v1/tenants/{id}` | Hämta tenant | Admin+ | | POST | `/api/v1/tenants` | Skapa tenant | Admin+ | | PATCH | `/api/v1/tenants/{id}` | Uppdatera tenant | Admin+ | | DELETE | `/api/v1/tenants/{id}` | Ta bort tenant | Admin+ | ## Tester ```bash pytest tests/ -v ``` ## Docker ```bash docker build -t landvex-user-management . docker run -p 8000:8000 --env-file .env landvex-user-management ``` ## Arkitektur ``` app/ ├── config.py # Inställningar (pydantic-settings) ├── database.py # SQLAlchemy async engine + session ├── models.py # SQLAlchemy-modeller (User, Tenant, Invitation) ├── schemas.py # Pydantic request/response-scheman ├── security.py # JWT, bcrypt, roll-hierarki ├── dependencies.py # FastAPI dependencies (get_current_user, RoleChecker) ├── main.py # FastAPI-app med routers ├── routers/ │ ├── auth.py # Login, refresh, change-password, me │ ├── users.py # User CRUD │ ├── invitations.py # Invitation-flöde │ └── tenants.py # Tenant CRUD └── services/ ├── user_service.py # Business logic: användare ├── invitation_service.py # Business logic: inbjudningar └── tenant_service.py # Business logic: tenants alembic/ └── versions/ # Databas-migrationer tests/ ├── conftest.py # Fixtures ├── test_auth.py ├── test_users.py └── test_invitations.py ``` ## Roll-hierarki | Roll | Nivå | Kan hantera | |------|------|-------------| | admin | 3 | Alla roller | | manager | 2 | analyst, viewer | | analyst | 1 | viewer | | viewer | 0 | — | En användare kan inte tilldela eller modifiera en användare med samma eller högre roll.