fix(docs): update NEXT_STEPS, README, and TEKNISK_BESKRIVNING with user role management details and new category structure
This commit is contained in:
+19
-10
@@ -31,8 +31,8 @@
|
||||
| Näringsvärden på produkter | ✅ Klart (schema + API) |
|
||||
| Seed produktdata med kategoritilldelning | ⚠️ Script klart, ej aktiverat i init |
|
||||
| Användarspecifika produkter (UserProduct) | ⚠️ Schema klart, UI basic |
|
||||
| Användarroller (user / admin) | ❌ Saknas |
|
||||
| Användarhantering i admin-UI | ❌ Saknas |
|
||||
| Användarroller (user / admin) | ✅ Klart |
|
||||
| Användarhantering i admin-UI | ✅ Klart |
|
||||
| Teknisk skuld — oanvända InventoryItem-fält | ✅ Klart (migration 20260418) |
|
||||
| Teknisk skuld — redirect-routes städade | ✅ Klart |
|
||||
| Avancerad AI-integration (veckoplanering, kampanjdata) | ❌ Planerad |
|
||||
@@ -51,15 +51,24 @@
|
||||
- Generera en ny `002-seed-products.sql` med korrekt `categoryId` per rad (via `SELECT` mot live-db)
|
||||
- Ta bort `.disabled`-suffixet och testa fresh install
|
||||
|
||||
### 2. Användarroller
|
||||
**Mål:** Säkerställa att endast behöriga användare har admin-rättigheter.
|
||||
### 2. Användarroller ✅
|
||||
**Klart.**
|
||||
|
||||
Idag har alla inloggade användare samma behörighetsnivå — ett säkerhetsproblem inför lansering.
|
||||
- **Databas:** Lägg till `role` (enum `user` | `admin`) på `User`-modellen i Prisma + migration
|
||||
- **Backend:** Rollbaserad guard (`@Roles('admin')`) — skyddar admin-endpoints; vanliga användare nekas med 403
|
||||
- **Auth:** Rollen inkluderas i JWT-tokenen och i Auth.js session-objektet
|
||||
- **Frontend — admin-UI (`/admin/users/`):** Lista användare, skapa nya konton (namn, e-post, lösenord, roll), ändra roll, avaktivera konto
|
||||
- **Frontend — skyddade routes:** `/admin/*` kräver admin-roll; omdirigerar annars till startsidan
|
||||
Systemet har nu fullständig rollbaserad åtkomstkontroll med två roller: `user` (standard) och `admin`.
|
||||
|
||||
**Vad som implementerades:**
|
||||
|
||||
- **Prisma-migration** (`20260418100000_add_user_role`) — fältet `role String @default("user")` lades till på `User`-modellen
|
||||
- **`@Roles('admin')`-dekoratorn** (`auth/decorators/roles.decorator.ts`) — använder `SetMetadata` för att markera endpoints
|
||||
- **`RolesGuard`** (`auth/roles.guard.ts`) — registrerad globalt som `APP_GUARD`; läser rollmetadata, kastar 403 om rätt roll saknas
|
||||
- **JWT inkluderar nu `role`** — `jwt.strategy.ts` returnerar `{userId, username, role}`, `auth.service.ts` signerar med `role` i payload
|
||||
- **Bootstrap-användare** (`users/admin-bootstrap.service.ts`) — `OnApplicationBootstrap` skapar/uppdaterar Nadmin, Padmin, user1 och user2 vid varje uppstart via miljövariabler
|
||||
- **Skyddade produkt-endpoints** — `@Roles('admin')` på `merge`, `delete`, `restore`, `reset-all`, `bulk-update`, `backfill-canonical` i `products.controller.ts`
|
||||
- **Användarhantering-API** — `GET /api/users` och `PATCH /api/users/:id/role` (båda kräver admin-roll)
|
||||
- **Frontend-session** — `auth.ts` sparar `role` i JWT och session; `types/next-auth.d.ts` utgör typdefinition
|
||||
- **Proxy-skydd** — `proxy.ts` blockerar `/admin/*` för användare utan admin-roll
|
||||
- **Admin-UI** — `/admin/users` med tabell och rollbyteskäppar; länken "👥 Användare" i navigeringen visas enbart för admins
|
||||
- **API-proxies** — `app/api/admin-users/route.ts` och `app/api/admin-users/[id]/route.ts` vidarebefordrar anrop med auth-header
|
||||
|
||||
### 3. Matplan-vy (frontend-polish) ✅
|
||||
**Klart.**
|
||||
|
||||
Reference in New Issue
Block a user