aee0f09db8
- Datafabrik: Dockerfile fix, agentorkestrering fungerar - Vision: Identify-modell, FAISS, OCR alla testade - API: Alla 7 integrationstester passerade - Upplösare: Entitetsupplösning verifierad
111 lines
3.6 KiB
Markdown
111 lines
3.6 KiB
Markdown
# 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.
|