feat: Implement admin user management features
- Added adminCreateUser endpoint and corresponding DTO for creating users. - Implemented deleteUser and resetPassword functionalities for admin users. - Introduced updateEmail functionality for admin users. - Updated UsersService to handle user creation, deletion, password reset, and email updates. - Modified UsersController to include new admin routes with appropriate role checks. - Refactored frontend navigation to link to user management under profile. - Created new profile tabs for user management and database management. - Developed AnvandareClient component for user management, including user creation, deletion, role changes, and password resets. - Added DatabsTab for managing product listings and merging duplicates. - Enhanced MinProfilTab for user profile management with form handling.
This commit is contained in:
+19
-9
@@ -33,6 +33,7 @@
|
||||
| Användarspecifika produkter (UserProduct) | ⚠️ Schema klart, UI basic |
|
||||
| Användarroller (user / admin) | ✅ Klart |
|
||||
| Användarhantering i admin-UI | ✅ Klart |
|
||||
| Profilsida med flikar (Min profil / Användare / Databas) | ✅ 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,24 +52,33 @@
|
||||
- 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 ✅
|
||||
### 2. Användarroller och full användarhantering ✅
|
||||
**Klart.**
|
||||
|
||||
Systemet har nu fullständig rollbaserad åtkomstkontroll med två roller: `user` (standard) och `admin`.
|
||||
|
||||
**Vad som implementerades:**
|
||||
Systemet har nu fullständig rollbaserad åtkomstkontroll och ett komplett användarhanteringsgränssnitt inbyggt i profilsidan.
|
||||
|
||||
**Rollsystemet:**
|
||||
- **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
|
||||
|
||||
**Backend-endpoints för användarhantering (alla kräver admin-roll):**
|
||||
- `GET /api/users` — lista alla användare
|
||||
- `PATCH /api/users/:id/role` — ändra roll
|
||||
- `POST /api/users` — skapa ny användare (validering: unikt användarnamn och e-post)
|
||||
- `DELETE /api/users/:id` — ta bort användare (skyddad: kan inte ta bort sig själv)
|
||||
- `POST /api/users/:id/reset-password` — genererar tillfälligt lösenord, returnerar meddelandetext + lösenord
|
||||
- `PATCH /api/users/:id/email` — uppdatera e-postadress
|
||||
|
||||
**Profilsidan med flikar (`/profil`):**
|
||||
- `?tab=profil` — Min profil (alla användare)
|
||||
- `?tab=anvandare` — Användare (enbart admin): skapa, ta bort, rollbyte, e-postbyte, lösenordsåterställning med kopierings-modal
|
||||
- `?tab=databas` — Databas (enbart admin): produktadmin (samma innehåll som `/admin/products`)
|
||||
- `/admin/users` omdirigerar till `/profil?tab=anvandare`
|
||||
- Navigeringslänken "👥 Användare" går direkt till `/profil?tab=anvandare`
|
||||
|
||||
### 3. Matplan-vy (frontend-polish) ✅
|
||||
**Klart.**
|
||||
|
||||
Reference in New Issue
Block a user